如何在Sql中以特定方式格式化字符串
我有一个代表版本的SQL(SQL Server 2016)列。这是NVARCHAR。我希望以一致的格式显示列。我对格式做了一些研究,但没有找到解决方案。有什么建议吗 输出的格式应始终为:XX.XX.XXXX 您可以假设在第一个小数点之前有两个数字(我可以使用CASE来修复这个问题) 输出的格式应始终为:XX.XX.XXXX 我想,强迫三位数变成两位数可能会很糟糕,但如果这些是要求:如何在Sql中以特定方式格式化字符串,sql,sql-server,tsql,split,Sql,Sql Server,Tsql,Split,我有一个代表版本的SQL(SQL Server 2016)列。这是NVARCHAR。我希望以一致的格式显示列。我对格式做了一些研究,但没有找到解决方案。有什么建议吗 输出的格式应始终为:XX.XX.XXXX 您可以假设在第一个小数点之前有两个数字(我可以使用CASE来修复这个问题) 输出的格式应始终为:XX.XX.XXXX 我想,强迫三位数变成两位数可能会很糟糕,但如果这些是要求: Declare @YourTable table (s varchar(25)) Insert Into @You
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 ......
你能提出你的问题吗?有什么问题吗?你正在修剪、填充,而且可能还需要其他东西。这应该在应用程序端IMHO上处理。您能在您的列中显示一些可能的值吗?这对我来说有不正确规范化的迹象。我有一种感觉,这是4个值被塞进了一列。像软件版本这样的东西经常会得到这种非规范化结构。它们不是为主修、辅修、发行版和修订版单独列,而是被塞进一个单独的列中,然后提取出来会很痛苦。谢谢!我发布的两个示例值代表了我所面临的“问题”值:(同意规范化评论——不幸的是,这是一个遗留问题,我必须处理,不能将这些值拆分为单独的列(此时)@syzyy78很乐意这样做)help@syzygy78为了记录在案,我继承了比这更糟糕的遗产
SomeField (No column name)
13.0.1221.00 13.00.1221
11.00.1111 11.00.1111
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 ......