我有一个 varchar 字段,想要删除只能转换为日期的行
价值 |
---|
2024年1月1日 |
1.2 |
1 |
0.6 |
2024 年 11 月 11 日 |
我尝试了这个脚本,但它工作不正确
select * from values where value > '01.01.1970'
结果:
价值 |
---|
2024年1月1日 |
1 |
2024 年 11 月 11 日 |
我需要
价值 |
---|
2024年1月1日 |
2024 年 11 月 11 日 |
此脚本出现异常:
select * from values where cast(value as date) > '01.01.1970'
类型“1.2”的语法不正确
从版本 16 开始,您可以使用函数 pg_input_is_valid() 来测试某些内容是否与数据类型匹配,例如日期。
SELECT
CAST(content AS date)
FROM (VALUES ('foo'), ('01.01.2024'), ('1.2.1900')) AS sub(content)
WHERE pg_input_is_valid(content,'date')
AND CAST(content AS date) > '1970-01-01';
没有这个条件,查询就会失败:
[22007] 错误:日期类型的输入语法无效:“foo”
当然,您将始终在数据库中使用有效的 ISO 日期。
使用 STR_TO_DATE 函数检查字符串是否可以转换为日期,然后在 DELETE 语句中使用该条件。
DELETE FROM your_table
WHERE STR_TO_DATE(your_column, '%Y-%m-%d') IS NOT NULL;