如何在Sql中以特定方式格式化字符串
我有一个表示版本的SQL(SQL Server 2016)列。它是NVARCHAR。我想以一致的格式显示该列。我对FORMAT做了一些研究,但找不到解决方案。任何指针?如何在Sql中以特定方式格式化字符串
输出应该永远是这样的形式:XX.XX.XXXX
你可以假设有两个数字的第一小数点前(我能使用CASE用于固定)
Sample Input
============
13.0.1221.00
11.00.1111
Desired Output
==============
13.00.1221
11.00.1111
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
谢谢!我发布的两个示例值代表我正面临的“问题”值:( 同意规范化评论---不幸的是,这是一个遗留问题,我必须处理并且不能将这些值分成单独的列(在这个时候) – syzygy78
@ syzygy78乐于帮忙 –
@ syzygy78为了记录,我遗传得更糟。:) –
输出应该永远是这样的形式:XX.XX.XXXX
强制三位数成两个最终会坏我猜想,但如果这些都要求:
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 ......
你能发表您的查询吗?它出什么问题了? –
你正在修整,填充,并可能需要别的东西。这应该在应用程序端恕我直言。 – scsimon
你可以在列中显示更多可能的值吗? –