如何在SQL Server中将文本数据更改为数字?

4
SELECT 
    a.AccountNumber, a.FirstName, a.LastName, a.Address, a.City, a.State, 
    a.Zip, a.EmailAddress, a.PhoneNumber, a.LastUpdated, a.LastVisit, 
    a.TotalSales, a.AccountOpened, a.CustomText4 as StoreCode, 
    CASE
        WHEN (a.CustomText1 IS 'JAN') THEN '1' 
    END AS DOB, 
    GETDATE() as Extract_date
FROM 
    database.dbo.Customer a

CustomText1列包含文本数据的月份数据。我正在尝试将JAN-DEC转换为数字。

CASE WHEN IS ''不起作用。


请尝试这个代码:WHEN (a.CustomText1 LIKE 'JAN%') THEN '1' - Hiten004
当a.CustomText为'Jan'时,返回1;当为'Feb'时,返回2... - Sean Lange
问题在于你在那里使用了 IS 而不是 =。 - Sean Lange
2个回答

7
"IS"不是CASE语句的有效表达式。请查看在线文档,您有几种方法可以解决此问题,这是最简单的方法,对于其余月份请重复操作。
SELECT DOB = 
    CASE a.CustomText1
        WHEN 'JAN' THEN '1'
        WHEN 'FEB' THEN '2'
        WHEN 'MAR' THEN '3'
        ELSE a.CustomText1
    END
FROM database.dbo.Customer a

1

Greg的答案可以用,但是超过了12行。以下是如何用一行代码实现。

SELECT MONTH(CAST('01' + CustomText1 + '00' AS DATE))
FROM dbo.Customer

1
是的,那肯定更优,但由于列名为“CustomText1”,您必须预测或防范意外值。该函数将为任何其他无效字符串引发错误,至少CASE有ELSE条件来防范这种情况。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接