Tsql 开发了奇怪的数据库,它没有键,允许将数字输入varchar,varchar也允许空值
我如何确保TSQL不会对我咆哮 这些值返回: “1.00000000” 或 无效的 或 '' 或 “一些价值”Tsql 开发了奇怪的数据库,它没有键,允许将数字输入varchar,varchar也允许空值,tsql,casting,varchar,Tsql,Casting,Varchar,我如何确保TSQL不会对我咆哮 这些值返回: “1.00000000” 或 无效的 或 '' 或 “一些价值” 如果您使用的是SQL Server 2012或更高版本,当我转换为int时,您可以使用TRY\u convert功能,例如 WITH yourTable AS ( SELECT 123 AS intVal UNION ALL SELECT '123' UNION ALL SELECT NULL ) SELECT intVal, CASE WHE
如果您使用的是SQL Server 2012或更高版本,当我转换为int时,您可以使用
TRY\u convert
功能,例如
WITH yourTable AS (
SELECT 123 AS intVal UNION ALL
SELECT '123' UNION ALL
SELECT NULL
)
SELECT
intVal,
CASE WHEN TRY_CONVERT(int, intVal) IS NOT NULL THEN 'yes' ELSE 'no' END AS can_parse
FROM yourTable;
在这种情况下,如果无法将输入转换为整数,
TRY\u CONVERT
函数将返回NULL
。因此,在尝试正式转换或转换之前,这是一种探测数据的安全方法。以下是我发现的对我有效的答案。。。
由于客户的原因,我不在2012或更高版本上
但不要给我荣誉:)我只擅长寻找对我有用的答案
尽管我将它从返回null改为返回零,因为愚蠢的varchar应该是一个默认值为零的int列:)
这是一个适用于任何真正是VARCHAR而不是int的值的函数
因为VARCHAR实际上是一种可变长度的字符串数据类型
WITH tmpTable AS (
SELECT '123' as intVal UNION ALL
SELECT 'dog' UNION ALL
SELECT '345' UNION ALL
SELECT 'cat' UNION ALL
SELECT '987' UNION ALL
SELECT '4f7g7' UNION ALL
SELECT NULL
)
Tim Biegeleisen对上述答案的认可。。。。
尽管如此,当他的解决方案找到角色时,它将
还是出错了。。。因此发生了变化
SELECT
intVal
,case when intVal not like '%[^0-9]%' then 'yes' else 'no' end FROM tmpTable;