在列中的sql查询中查找并替换为新值

在列中的sql查询中查找并替换为新值,sql,sql-server,Sql,Sql Server,我需要列出所有的州。例如,我的状态表中的值是 01 - Tamilnadu 2 - Andhra 03 - MP 4 - Kerala 等等, 我需要的是,如果前面的数字是一个数字,那么我必须在后面加上零。例如,andhra只有一个数字,我需要它作为02-在选择过程中,andhra将按原样返回值。这是我的尝试,它有很多语法错误。你能请任何人帮我完成我的查询吗 select [state],case(len(SUBSTRING([state],1,CHARINDEX('-', [state]+'

我需要列出所有的州。例如,我的状态表中的值是

01 - Tamilnadu
2 - Andhra
03 - MP
4 - Kerala
等等,

我需要的是,如果前面的数字是一个数字,那么我必须在后面加上零。例如,andhra只有一个数字,我需要它作为02-在选择过程中,andhra将按原样返回值。这是我的尝试,它有很多语法错误。你能请任何人帮我完成我的查询吗

select [state],case(len(SUBSTRING([state],1,CHARINDEX('-', [state]+'-')-1)))
when  1 then
state = append zero in the state
when 2
state = leave value as it is
End
 from states where [state] is not null order by id desc;
谢谢你试试这个

select right('0'+state,2), statename
from states
Select Right('00'+cast(ColumnName As varchar),2)
from TableName

Select Right('00'+cast(state As varchar),2), StateName
from States where [state] is not null order by id desc;

实现这一点的一种简单方法是连接大多数字符,然后使用右手

像这样:

SELECT RIGHT('00' + CONVERT(VARCHAR,[state]), 2) + ' - ' + Name
FROM states
WHERE [state] IS NOT NULL
ORDER BY id DESC;
如果出于某种原因,
[state]
列包含所有数据(例如,
'1-Tamilnadu'
),则需要将其修改为如下所示:

SELECT RIGHT('00' + [state], LEN([state]))
FROM states
WHERE [state] IS NOT NULL

尽管最好将id分开。

如果您在执行
选择时需要修复数字,这是一种可能的解决方案

Select replicate('0',2-len(stateId)) + cast(stateid as varchar) +'-' + state_name as  StateName
SELECT CASE WHEN state LIKE '[0-9] - %'
            THEN '0' + state
            ELSE state
       END state
  FROM states
 WHERE state IS NOT NULL
 ORDER BY Id DESC
样本输出:

state -------------- 01 - Tamilnadu 02 - Andhra 03 - MP 04 - Kerala
请看看这个

SELECT state, 
CASE LENGTH(SUBSTRING_INDEX(state, '-', 1)) 
WHEN 1 
THEN CONCAT('0', state) 
END AS changedstate
FROM  states 
WHERE state ID NOT NULL 
ORDER BY id desc;

谢谢

如果我是你,当你说要替换时,我会将数字移到一个新的INT列。你的意思是更新表中的值,还是只需要一个select语句?这不是两个不同的列。它只有一列,只有当我的状态在字符-,之前只有一个数字时,我才需要在开头加零。否则它应该按原样选择。例如,在选择过程中,现在安得拉邦只有一个数字在-。我需要02-安得拉那样。对于泰米尔纳德邦,它不应该添加任何零,因为它已经有两个数字了。唯一的select语句是enough@user1845163好啊请参阅这两种可能的解决方案的答案。您好,我已修改了您的查询以符合我的要求,但它会将0添加到所有具有多个数字长度的状态。这是我修改过的。从[state]不为null的状态按id desc顺序选择left('0'+cast(状态为varchar))、len(状态))、StateName;如果-before只有一个数值,请帮助我添加零。另外,您还想更改right()而不是left()修改您的查询,如下图所示,以符合我的要求。从状态中选择左('0'+转换(VARCHAR,[state]),1)+[state]。在选择其显示001-泰米尔纳德邦的过程中,如果有两个字符,则不应更改之前的值。它应该只改变2-Andhra,因为这里之前只有一个数字字符
SELECT state, 
CASE LENGTH(SUBSTRING_INDEX(state, '-', 1)) 
WHEN 1 
THEN CONCAT('0', state) 
END AS changedstate
FROM  states 
WHERE state ID NOT NULL 
ORDER BY id desc;