Sql 防止在字母等级前引入零?
我在SQL中使用Sql 防止在字母等级前引入零?,sql,sql-server-2008,tsql,case,Sql,Sql Server 2008,Tsql,Case,我在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
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等级时,是否可以防止前导零?修改现有案例陈述是否可行?我尝试添加以下内容:
WHEN GRADE = 'K' THEN 'K'
但这并没有解决问题,我的INSERT语句失败了。如果有人能提供帮助或知道更好的解决方案,请让我知道。谢谢大家! 这里有一种方法: 创建并填充样本表(请在以后的问题中保存此步骤) 查询:
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
这里有一种方法: 创建并填充样本表(请在以后的问题中保存此步骤) 查询:
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
这就是我要做的事情-
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
我会这样做的-
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
插入失败的错误消息是什么?@HABO在存在时之后。插入失败的错误消息是什么?@HABO在存在时之后。您建议对临时表执行此操作吗?有一件事我没有提到上面的Grade字段被设置为CHAR(2)。不一定,这只是我为你们准备的一个在你们的机器上运行的例子。您可以将下面的代码用于您的用例。数据类型无关紧要。您可以在示例中使用Char。如果LEN(Grade)=1且ISNUMERIC(Grade)=1,则“0”加Grade ELSE Grade end您建议对临时表执行此操作?有一件事我没有提到上面的Grade字段被设置为CHAR(2)。不一定,这只是我为你们准备的一个在你们的机器上运行的例子。您可以将下面的代码用于您的用例。数据类型无关紧要。您可以在示例中使用Char。如果LEN(Grade)=1且ISNUMERIC(Grade)=1,则“0”+Grade ELSE Grade end不需要两个前导零。我的成绩字段设置为字符(2)。因此,如果需要,只能输入0前导零。谢谢你的帮助!我的答案是基于你的密码。。。只需一个前导零,它就可以工作。不需要两个前导零。我的成绩字段设置为字符(2)。因此,如果需要,只能输入0前导零。谢谢你的帮助!我的答案是基于你的密码。。。它应该在只有一个前导零的情况下工作。