我在SQL中使用CASE
语句来检查Grade列的值。例如,如果用户输入7,我将前面的0保持在前面,因此值将保存为07
。一切正常,直到我们在我们的应用程序中添加K等级作为选项。现在,如果用户输入K值将保存为0K
。以下是我的SQL Case语句示例:
CASE
WHEN LEN(LTRIM(RTRIM(GRADE))) = 0 THEN NULL
ELSE RIGHT('00'+ISNULL(LTRIM(RTRIM(GRADE)),''),2)
END
上面的代码用于INSERT SELECT语句。我想知道当用户进入K等级时是否可以阻止前导零?这是否可以修改现有的CASE语句?我试过添加这个:
WHEN GRADE = 'K' THEN 'K'
但这并没有解决问题,我的INSERT语句失败了。如果有人可以帮助或知道更好的解决方案,请告诉我。谢谢!
答案 0 :(得分:2)
这是一种方法:
创建并填充样本表(请在将来的问题中保存此步骤)
DECLARE @T AS TABLE
(
GRADE varchar(3)
)
INSERT INTO @T VALUES
('7'), (''),('03'),('001'),('K'), (NULL)
查询:
SELECT CASE WHEN LEN(LTRIM(RTRIM(GRADE))) = 0 THEN NULL
WHEN GRADE NOT LIKE '%[^0-9]%' THEN RIGHT('00' + GRADE, 3)
ELSE GRADE
END As Res
FROM @T
结果:
Res
007
NULL
003
001
K
NULL
答案 1 :(得分:2)
这就是我的方式 -
IF EXISTS(SELECT TOP 1 1 FROM sys.tables WHERE name = 'tb_Test')
BEGIN
DROP TABLE dbo.tb_Test
END
CREATE TABLE dbo.tb_Test (ID INT IDENTITY(1,1) PRIMARY KEY, Grade NVARCHAR(10))
INSERT dbo.tb_Test (Grade)
VALUES ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10'),('K')
SELECT CASE WHEN LEN(Grade) = 1 AND ISNUMERIC(Grade) = 1 THEN '0'+Grade
WHEN ISNUMERIC(Grade) = 1 THEN Grade
WHEN ISNUMERIC(Grade) = 0 THEN Grade END
FROM dbo.tb_Test