varchar
。我尝试使用功能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');
答案 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
请让我知道
谢谢