Yin*_*ing 2 sql sql-server numbers sql-server-2014
我正在使用一个包含varchar的列的视图,该列可以具有类似8.60或V或的值NULL.
我正在尝试创建一个select语句,在可能的情况下将值转换为数字,否则返回原始值.
所以我想出了这个测试查询:
SELECT
CASE
WHEN ISNUMERIC('V') = 1
THEN cast(round('V', 1) as numeric(4,1))
ELSE 'V'
END
as Value;
Run Code Online (Sandbox Code Playgroud)
我希望它返回V,但我得到一个错误:Error converting data type varchar to numeric.
我试图玩弄TRY_PARSE和TRY_CAST,并与round和cast没有成功.错误似乎与THEN子句有关,因为没有,它不会抛出错误.
我该怎么写这个查询?
SQL版本: Microsoft SQL Server 2014(SP2-GDR)(KB4019093) - 12.0.5207.0(X64)
使用:Microsoft SQL Server Management Studio v12.0.2000.8
甲case表达式返回单个值.该值有一种类型.你的case表达式返回一个数字和一个字符串.该数字优先,因此SQL Server尝试将字符串转换为数字.
因此,你的错误.
您可以通过省略'V'并使用NULL以下方法解决此问题:
SELECT (CASE WHEN ISNUMERIC('V') = 1
THEN cast(round('V', 1) as numeric(4,1))
ELSE NULL
END) as Value;
Run Code Online (Sandbox Code Playgroud)
或者,更简单:
SELECT TRY_CONVERT(numeric(4, 1), 'V')
Run Code Online (Sandbox Code Playgroud)
注意:我假设您打算'V'作为示例字符串值而不是列.如果是一列,单引号是错误的.
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |