查找具有特定日期格式的记录

时间:2019-10-15 09:34:40

标签: sql sql-server tsql

  1. 我想选择所有非yyyy-mm-dd格式的记录。列的数据类型为varchar
  2. 使用正确的格式(yyyy-mm-dd)更新步骤1中的记录。

我尝试使用功能IsDate()进行过滤,但没有成功。

创建表格

CREATE TABLE #tempdate (dateCol varchar(50));

INSERT INTO #tempdate VALUES 
('2019-05-13 16:55:47:284'),
('2019-04-05 14:08:10.060'),
('6/19/2018 12:35:53 PM'),
('2019-05-13');

5 个答案:

答案 0 :(得分:1)

使用try_cast()

select try_cast(datecol as date)

答案 1 :(得分:0)

您可以在下面尝试-

update #tempdate set datecol=format(cast(dateCol as date),'yyyy-mm-dd')

答案 2 :(得分:0)

1。

SELECT * FROM #tempdate 
WHERE ISDATE(dateCol)= 1 AND CHARINDEX('-',dateCol) = 5

2。

UPDATE #tempdate
SET datecol = CONVERT(DATETIME,datecol,102)
WHERE ISDATE(dateCol)= 1 

SELECT * FROM #tempdate

答案 3 :(得分:0)

EzLo在上面的评论中给出了最重要的答案:不要以字符串格式存储日期/时间值。

本机日期/时间类型以不可读的二进制模式存储。任何行动都将更快,更安全地抵制文化依赖性。

可读格式仅用于输出,应在导出中或在表示层内完成。

如果您必须坚持这样做(或者这是您尝试清理数据并将其转换为正确格式的尝试),建议您使用以下一种方法:

SELECT *
FROM #tempdate 

-均使用文本基本格式

WHERE LEFT(dateCol,10) NOT LIKE '[1,2][0-9][0-9][0-9]-[0,1][0-9]-[0-3][0-9]';

-或使用固定的转换格式(此处我将126用于ISO8601)

WHERE TRY_CONVERT(date,dateCol,126) IS NULL

答案 4 :(得分:0)

请尝试以下操作。

Build Phases

请让我知道

谢谢