2016-12-14 9 views
2

バージョンを表すSQL(SQL Server 2016)列があります。これはNVARCHARです。私は一貫した形式で列を表示したい。私はFORMATに関するいくつかの調査をしましたが、解決策を見つけることができませんでした。すべてのポインタをお願いしますか?Sqlの特定の方法で文字列を書式設定する方法

出力は常に形式である必要があります。XX.XX.XXXX

は、次の2つの数字は、最初の小数点の前にあることを前提とすることができます(私はそれを固定するためのCASEを使用することができました)

Sample Input 
============ 
13.0.1221.00 
11.00.1111 

Desired Output 
============== 
13.00.1221 
11.00.1111 
+0

あなたの質問を投稿できますか?どうしたの? –

+3

あなたはトリミング、詰め込み、そしておそらく他のものへの必要性もあります。これは、アプリケーション側のIMHOで処理する必要があります。 – scsimon

+0

列に可能な値をいくつか表示できますか? –

答えて

3
Declare @YourTable table (SomeField varchar(25)) 
Insert Into @YourTable values 
('13.0.1221.00'), 
('11.00.1111') 

Select A.* 
     ,Format(Pos1,'00')+'.'+Format(Pos2,'00')+'.'+Format(Pos3,'0000') 
From @YourTable A 
Cross Apply (
    Select Pos1 = xDim.value('/x[1]','int') 
      ,Pos2 = xDim.value('/x[2]','int') 
      ,Pos3 = xDim.value('/x[3]','int') 
    From (Select Cast('<x>' + Replace(A.SomeField,'.','</x><x>')+'</x>' as XML) as xDim) A 
     ) B 

戻り

SomeField  (No column name) 
13.0.1221.00 13.00.1221 
11.00.1111  11.00.1111 
+0

ありがとう!私が投稿した2つのサンプル値は、私が直面していた "問題"値を表しています:( 残念ながら、残念ながら、これは対処しなければならず、値を別々に分割できません列(今の時) – syzygy78

+0

@ syzygy78助けてくれるよ –

+1

@ syzygy78記録のために、私ははるかに悪いことを受け継いだ。 –

0

私は推測悪い終わるでしょうXX.XX.XXXX

二つに3桁の強制が、これらの場合の要件です:出力は常に形式でなければなりません

Declare @YourTable table (s varchar(25)) 
Insert Into @YourTable values 
('13.0.1221.00'), 
('11.00.1111'), 
('189.256.0000001'), 
('7'), 
('.19.'), 
('13.4.'), 
('..11'), 
('A..B'), 
(null), 
('......') 

;WITH rs AS (SELECT s, REVERSE('0' + s) AS rs FROM @YourTable) 
    SELECT REVERSE(LEFT(ISNULL(PARSENAME(rs, 3), '') + '0000', 4) + '.' + 
        LEFT(ISNULL(PARSENAME(rs, 2), '') + '00' , 2) + '.' + 
        LEFT(ISNULL(PARSENAME(rs, 1), '') + '00' , 2)), s 
    FROM rs 

結果:

13.00.1221 13.0.1221.00 
11.00.1111 11.00.1111 
89.56.0001 189.256.0000001 
07.00.0000 7 
00.19.0000 .19. 
13.04.0000 13.4. 
00.00.0011 ..11 
0A.00.000B A..B 
00.00.0000 NULL 
00.00.0000 ...... 
関連する問題