您好我在下面有一个小问题:
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的其他两列,也是如此。
由于
答案 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将为您提供所请求的字节数。您可以更好地检查数据库外部的输入,或者查看是否有适用于您的数据库的导入工具,可以为您执行这些类型的检查。