我正在尝试一些需要案例的情况我只是想确定我们是否可以使用多个案例?我在sql teradata上运行它 我试图使用的代码如下
AND(
case when CHARACTER_LENGTH(drug.n)=0 then 0
when CHARACTER_LENGTH(drug.n)=1 then
(case when substring(drug.n from 1,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end)
when CHARACTER_LENGTH(drug.n)=2 then
(case when substring(drug.n from 1,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end *
case when substring(drug.n from 2,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end )
when CHARACTER_LENGTH(drug.n)=3 then
(case when substring(drug.n from 1,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end *
case when substring(drug.n from 2,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end *
case when substring(drug.n from 3,1) in (''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') then 1 else 0 end )=1
如果有人有更好的想法,你可以告诉我。我不能使用isnumeric函数。
答案 0 :(得分:1)
是的,您可以使用嵌套的CASE
语句。在Teradata中没有问题
答案 1 :(得分:0)
好的 -
要确定任意长度字符串是否仅包含数字字符(或不包含),可以使用重复CTE。
请注意,我不知道您的RDBMS是否实际支持递归CTE,但这是一个潜在的解决方案。此外,我不确定性能的影响 - 但是,它确实消除了多个CASE
效果(为什么这不是一个实际的数字字段,反正呢?)。
所以...对于一个看起来像这样的表:
id ch
================
1 1234567890
2 asdg
此语句返回包含仅数字字符(任意长度)的所有行:
WITH splitstring (id, chard, start, orig) as (
SELECT id, SUBSTRING(ch, 1, 1), 1, ch
FROM chartable
UNION ALL
SELECT id, SUBSTRING(orig, start + 1, 1), start + 1, orig
FROM splitstring
WHERE LENGTH(orig) > start)
SELECT *
FROM chartest as a
WHERE NOT EXISTS (SELECT '1'
FROM splitstring as b
WHERE a.id = b.id
AND chard NOT BETWEEN '0' AND '9')
如果没有一些较大的背景,很难确切地知道你想要完成什么。但是,这应该适合您的需求。
(作为旁注,iSeries的DB2似乎也不支持正则表达式...)