动态CASE表达式
问题描述:
有无论如何有一个基于值是一个整数或一个字符产生不同结果的case表达式。动态CASE表达式
表
ID CODE
1 ABC
2 123
3 YHU
4 456
5 ikl
我正在寻找的是分离的int和炭的表达式。
结果例如
ID CODE Category
1 ABC Char
2 123 Int
3 YHU Char
4 456 Int
5 ikl Char
我一般的逻辑
CASE WHEN CODE = INT THEN 'Int' Else 'Char' end as Category
但我不知道这是否是在SQL可能吗?
我期待主要是一种方式,以识别是否其int或字符
UPDATE:
什么是从字符的数字,*和分离的最佳方法 - 使用CASE表达式为2点不同的类别
ID CODE Category
1 * No_NUM
2 123 NUM
3 YHU No_NUM
4 456 NUM
5 ikl No_NUM
6 - No_NUM
答
您可以使用SQL ISNUMERIC功能。
SELECT ID, CODE, CASE ISNUMERIC(CODE) WHEN 1 THEN 'NUM' ELSE 'No_NUM' END AS Category FROM my_table;
用正则表达式的另一个变化
SELECT ID, CODE, CASE WHEN CODE LIKE '%[0-9]%' THEN 'NUM' ELSE 'No_NUM' END AS Category FROM my_table;
答
你可以使用TRY_CAST
(SQL服务器2012+)
SELECT *,
CASE WHEN TRY_CAST(CODE AS INT) IS NOT NULL THEN 'Int' ELSE 'Char' END
FROM tab;
我认为该列是NOT NULL
。
编辑:
它是文本里面CASE
:
SELECT *,
CASE WHEN TRY_CAST(CODE AS INT) IS NOT NULL THEN 'NUM' ELSE 'No_NUM' END
FROM tab;
答
使用PATINDEX:
create table #temp ([ID] int, [CODE] nvarchar(5))
insert into #temp values (1, '*')
insert into #temp values (2, '123')
insert into #temp values (3, 'YHU')
insert into #temp values (4, '456')
insert into #temp values (5, 'ikl')
Select ID
, CASE when PATINDEX('%[0-9]%', [code]) = 1 then 'num'
-- when PATINDEX('%[^0-9]%', [code]) = 1 then 'no_num'
-- when PATINDEX('%[A-Z]%', [code]) = 1 then 'char'
-- when PATINDEX('%[^A-Z]%', [code]) = 1 then 'no_char' /*etc..*/
ELSE 'no_num' END AS 'Category'
from #temp
你可以看看我的更新 –