如何删除可以投射到日期的行?

问题描述 投票:0回答:2

我有一个 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”的语法不正确

sql postgresql
2个回答
0
投票

从版本 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 日期。


-1
投票

使用 STR_TO_DATE 函数检查字符串是否可以转换为日期,然后在 DELETE 语句中使用该条件。

DELETE FROM your_table
WHERE STR_TO_DATE(your_column, '%Y-%m-%d') IS NOT NULL;
© www.soinside.com 2019 - 2024. All rights reserved.