我想确定一个值是否为整数(如TryParse在.NET中).不幸的是ISNUMERIC,我不适合我,因为我只想解析整数而不是每种数字.有ISINT什么东西吗?
这里有一些代码可以清楚地表达出来.如果MY_FIELD不是int,则此代码将失败:
SELECT @MY_VAR = CAST(MY_FIELD AS INT)
FROM MY_TABLE
WHERE MY_OTHER_FIELD = 'MY_FILTER'
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在使用SQL Server 2008 R2并且有一个VARCHAR我想要转换为DECIMAL(28,10)使用的列CONVERT.但是其中许多行格式错误,因此无法将它们解析为数字.在这种情况下,我只想通过将结果设置为0或NULL来跳过这些.
我知道SQL Server 2012(TRY_CONVERT())中有一个新的语句会很方便.
这可能是在2008年还是我必须等到我们更新到下一个版本的SQL 2012?
编辑
不幸的ISNUMERIC()是,在这种情况下不可靠.我试过了
ISNUMERIC(myCol) = 1
Run Code Online (Sandbox Code Playgroud)
对于CONVERT无法转换为的行,返回true DECIMAL.
我有以下代码将nvarchar转换为整数:
cast(@value as int)
Run Code Online (Sandbox Code Playgroud)
但是我无法控制参数@value,因此代码可能会失败.无论如何,在进行演员表演之前是否可以检查演员表是否可行?
我正在尝试优化执行以下操作的查询:
SELECT
...
CASE WHEN (condition) THEN (expensive function call #1)
ELSE (expensive function call #2)
END
...
Run Code Online (Sandbox Code Playgroud)
查询计划显示,即使在100%的行满足WHEN子句的情况下,大部分时间都花在调用ELSE分支中的结果上.
我能理解这一点的唯一方法是假设SQLServer正在评估两个结果,然后只根据WHEN条件的评估选择一个结果,但我找不到任何关于CASE结果的确定性引用语句在条件之前进行评估.有人可以澄清或指点我参考吗?
在 SQL Server 2008 中获得相同输出的最简单方法是什么?
SQLServer 2012:
select
try_parse(Isnull('123.66',0) as float) as a ,
try_parse(Isnull('.',0) as float) as b
Run Code Online (Sandbox Code Playgroud)
结果
a b
------------
123.66 NULL
Run Code Online (Sandbox Code Playgroud)
SQLServer 2008:?
我知道这对某些人来说可能很简单,但我很难做到这一点。我只是想将两列添加在一起。我的第一个数字是“FirstShift”= 90,“SecondShift”= 100。为什么我没有得到 190?我应该看到我的 23 条记录都具有不同的值,190 是我的最高记录。
SELECT
[FirstShift] + [SecondShift] AS [Total Counted]
FROM
Run Code Online (Sandbox Code Playgroud)
谢谢
我在下面有一个简单的选择语句:
SELECT Code = Cast([Code] as int)
FROM dbo.table
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
转换 nvarchar 值“?”时转换失败 到数据类型int。
我想编写 IFERROR 或 CASE 语句,用 -9999 之类的数字替换错误
sql-server ×7
sql ×4
t-sql ×4
casting ×1
integer ×1
isnumeric ×1
optimization ×1
performance ×1