带SUBSTRING的Sql CASE语句?

时间:2011-01-25 15:08:01

标签: sql

您好我在下面有一个小问题:

SELECT  SubscriberDataId,
        SUBSTRING(FacetsData,  5,  9) SubscriberCode,
        SUBSTRING(FacetsData, 14, 35) SubscriberLastName,
        SUBSTRING(FacetsData, 50, 15) SubscriberFirstName
FROM    Facets.FacetsImport
WHERE   DataIndicator = 'DEM1'

我试图在此查询中使用Case语句,但不知道如何。我要做的是我必须从上面的3个字段中找到无效记录。所以我要用 LEN(SubscriberCode) > 9(9是数据类型的长度),当它大于9时,然后将其插入错误表。对于长度为35和15的其他两列,也是如此。

由于

2 个答案:

答案 0 :(得分:0)

当且仅当输入字符串为64个字符或更长时,字符串才具有正确的长度:

INSERT
INTO    main_table
SELECT  SubscriberDataId,
        SUBSTRING(FacetsData,  5,  9) SubscriberCode,
        SUBSTRING(FacetsData, 14, 35) SubscriberLastName,
        SUBSTRING(FacetsData, 50, 15) SubscriberFirstName
FROM    Facets.FacetsImport
WHERE   DataIndicator = 'DEM1'
        AND LEN(FacetsData) >= 64

INSERT
INTO    error_table
SELECT  SubscriberDataId,
        SUBSTRING(FacetsData,  5,  9) SubscriberCode,
        SUBSTRING(FacetsData, 14, 35) SubscriberLastName,
        SUBSTRING(FacetsData, 50, 15) SubscriberFirstName
FROM    Facets.FacetsImport
WHERE   DataIndicator = 'DEM1'
        AND (LEN(FacetsData) < 64 OR FacetsData IS NULL)

答案 1 :(得分:0)

您将无法使用子字符串测试&gt; 9,&gt; 35,&gt; 15,因为substring将为您提供所请求的字节数。您可以更好地检查数据库外部的输入,或者查看是否有适用于您的数据库的导入工具,可以为您执行这些类型的检查。