2013-06-25 31 views
5

私はnvarcharカラムを持っています。文字列内の固定点にハイフンを挿入する必要があります。列の値が文字をSQL文字列に挿入します。

0000050704 

であり、私はそれが

0000050-70-4 

する必要があり :ハイフンのような、右端の文字と次の間、そして再び右から3番目の位置に移動する必要がありますまたは値が

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では、sthを実行できます。このように:

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 
関連する問題