2013-06-25 158 views
5

我有一個nvarchar列,我需要在字符串中的固定點插入一個連字符。連字符需要的最右邊的字符而下,又在第三的位置從右邊之間,例如在去: 列值插入字符到SQL字符串

0000050704 

,我需要它是

0000050-70-4 

或值是

0555256321 

並且它應該是

0555256-32-1 

看不到這是如何完成的。任何人都可以給我一點幫助嗎?

+2

哪個數據庫? – davek

+4

如果是SQL Server,則爲此設置'STUFF()'... – JNK

回答

7

假設字符串的長度可變,則需要在表達式中使用REVERSE()或許多令人討厭的LEN()值。

declare @txt varchar(100) = '0000050704' 

--If using SQL Server, the STUFF() function is your friend 
select REVERSE(STUFF(STUFF(REVERSE(@txt), 2, 0, '-'), 5, 0, '-')) 

--if not you'll need to concatenate SUBSTRING()s 
select REVERSE(SUBSTRING(REVERSE(@txt), 1, 1) + '-' + SUBSTRING(REVERSE(@txt),2, 2) + '-' + SUBSTRING(REVERSE(@txt),4, LEN(@txt))) 
1

這取決於你的SQL服務器。請檢查有關如何操作字符串的文檔 - 我將假設SUBSTRING函數。

在MS SQL Server中,你可以做某事。像這樣:

UPDATE YourTableName SET 
    YourFieldName = 
     SUBSTRING(YourFieldName, 1,7) + "-" + 
     SUBSTRING(YourFieldName, 7,2) + "-" + 
     SUBSTRING(YourFieldName, 9,1) 

這三個部分分割你的字段內容,並與隔板重建它...

運行查詢,我會建議你嘗試,因爲普通的SELECT,看它是否可以作爲前需要:

SELECT 
    SUBSTRING(YourFieldName, 1,7) + "-" + 
    SUBSTRING(YourFieldName, 7,2) + "-" + 
    SUBSTRING(YourFieldName, 9,1) 
FROM YourTableName 

請注意查詢沒有WHERE條件,因此會影響表的所有行。

1

你可以用這個簡單的函數:

CREATE FUNCTION [dbo].[SetHyphen] (@S varchar(50)) RETURNS varchar(52) 
BEGIN 
RETURN STUFF(STUFF(@S,LEN(@S)-2,0,'-'),LEN(@S)+1,0,'-') 
END 

例如:

select [dbo].[SetHyphen]('0000050704') 
0000050-70-4