use*_*158 6 database sql-server
我需要在sql中找到导致表中行的错误,例如:
我们有发票表,如果我需要转换发票日期列,则由于行ID 4处存在特殊字符而导致错误
Row ID INVOICE DATE AMOUNT
1 05/22/2015 25
2 05/27/2015 85
3 05/17/2015 15
4 , 28
Run Code Online (Sandbox Code Playgroud)
我的问题是如果发票表有数十亿的数据,如何找到行ID.有没有办法获得Row ID?请帮忙
使用ISDATE
功能
如果表达式是有效的日期,时间或日期时间值,则返回1; 否则,0
select *
from yourtable
where ISDATE([INVOICE DATE]) = 0
Run Code Online (Sandbox Code Playgroud)
在SQL Server 2012+
您可以使用TRY_CONVERT
函数进行转换.
如果转换成功,则返回强制转换为指定数据类型的值; 否则,返回null.
如果字符串是有效日期,那么它将被转换为date
else字符串将被转换为NULL
更新:根据您的意见
样本数据
CREATE TABLE test_tab
([Row ID] int, [INVOICE DATE] varchar(10), [AMOUNT] int)
;
INSERT INTO test_tab
([Row ID], [INVOICE DATE], [AMOUNT])
VALUES
(1, '05/22/2015', 25),
(2, '05/27/2015', 85),
(3, '05/17/2015', 15),
(4, ',', 28)
;
Run Code Online (Sandbox Code Playgroud)
询问
SELECT [Row ID],
Try_convert(date, [INVOICE DATE]) AS [INVOICE DATE],
amount,
CASE
WHEN Try_convert(date, [INVOICE DATE]) IS NULL THEN Concat('Row ID ', [Row ID], ' has some conversion issue')
ELSE 'Valid Date'
END AS comments
FROM test_tab
Run Code Online (Sandbox Code Playgroud)
结果:
???????????????????????????????????????????????????????????????????????
? Row ID ? INVOICE DATE ? amount ? comments ?
???????????????????????????????????????????????????????????????????????
? 1 ? 2015-05-22 ? 25 ? Valid Date ?
? 2 ? 2015-05-27 ? 85 ? Valid Date ?
? 3 ? 2015-05-17 ? 15 ? Valid Date ?
? 4 ? NULL ? 28 ? Row ID 4 has some conversion issue ?
???????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8882 次 |
最近记录: |