Jar*_*red 6 sql t-sql sql-server sql-server-2005
我试图在一个JOIN ON子句中构建一个case/if语句.
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT([Statuses].[STRID], 3) = [CTE].[F61]
Run Code Online (Sandbox Code Playgroud)
问题是该列[Statuses].[STRID]包含文本和数字.我将它与之比较的列[CTE].[F61]是一个整数.
有没有办法检测列[Statuses].[STRID]是否有字符或数字,如果是字符,那么将其设置为0?
这是一个伪查询来帮助:
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT((CASE [Statuses].[STRID] WHEN TEXT THEN 0 ELSE CAST([Statuses].[STRID] AS INT) END), 3) = [CTE].[F61]
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
谢谢!
Con*_*rix 16
你正在寻找IsNumeric,但它并不总是有效(+, - 和.是数字)所以你需要使用GBN描述的解决方案,即将.0e0添加到你的varchar
LEFT JOIN [CTSTRC] [Statuses] ON
(CASE WHEN ISNUMERIC(RIGHT([Statuses].[STRID], 3) + '.0e0) = 1
THEN CAST(RIGHT([Statuses].[STRID], 3) AS INT)
ELSE 0 END) = [CTE].[F61]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42606 次 |
| 最近记录: |