Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Sql中以特定方式格式化字符串_Sql_Sql Server_Tsql_Split - Fatal编程技术网

如何在Sql中以特定方式格式化字符串

如何在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

我有一个代表版本的SQL(SQL Server 2016)列。这是NVARCHAR。我希望以一致的格式显示列。我对格式做了一些研究,但没有找到解决方案。有什么建议吗

输出的格式应始终为:XX.XX.XXXX

您可以假设在第一个小数点之前有两个数字(我可以使用CASE来修复这个问题)

输出的格式应始终为: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  ......

你能提出你的问题吗?有什么问题吗?你正在修剪、填充,而且可能还需要其他东西。这应该在应用程序端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  ......