sql 查询得到静态结果
sql query to get static result
我有一个数字数据:
123456789
我需要将其转换为:
123-45-6789
如果我的数据是这样的:56789 和 456789
它应该转换为:5-6789 和 -45-6789
我需要一个 sql 查询来根据数据自动转换(列)。
您不应使用 sql 来格式化您的结果,日期和时间除外。您应该将结果格式化为代码
您似乎想从字符串的末尾算起。我会建议这样的事情:
select (case when len(str) <= 4 then str
when len(str) = 5 then left(str, 1) + '-' + right(str, 4)
when len(str) > 5 then stuff(str, 1, len(str) - 6, '') + '-' + left(right(str, 6), 2) + '-' + right(str, 4)
end)
是这样的吗?:
select FORMAT(@yourNumber, N'###-##-####')
您可以在此处找到有关 FORMAT 方法的更多信息:
https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql
还有一个选择
Declare @YourTable table (SomeCol int)
Insert Into @YourTable values
(123456789)
,(56789)
,(456789)
,(6789)
Select *
,ltrim(replace(stuff(stuff(str(SomeCol,9),6,0,'-'),4,0,'-'),' -',''))
From @YourTable
Returns
SomeCol (No column name)
123456789 123-45-6789
56789 5-6789
456789 45-6789
6789 6789
我有一个数字数据: 123456789
我需要将其转换为: 123-45-6789
如果我的数据是这样的:56789 和 456789 它应该转换为:5-6789 和 -45-6789
我需要一个 sql 查询来根据数据自动转换(列)。
您不应使用 sql 来格式化您的结果,日期和时间除外。您应该将结果格式化为代码
您似乎想从字符串的末尾算起。我会建议这样的事情:
select (case when len(str) <= 4 then str
when len(str) = 5 then left(str, 1) + '-' + right(str, 4)
when len(str) > 5 then stuff(str, 1, len(str) - 6, '') + '-' + left(right(str, 6), 2) + '-' + right(str, 4)
end)
是这样的吗?:
select FORMAT(@yourNumber, N'###-##-####')
您可以在此处找到有关 FORMAT 方法的更多信息: https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql
还有一个选择
Declare @YourTable table (SomeCol int)
Insert Into @YourTable values
(123456789)
,(56789)
,(456789)
,(6789)
Select *
,ltrim(replace(stuff(stuff(str(SomeCol,9),6,0,'-'),4,0,'-'),' -',''))
From @YourTable
Returns
SomeCol (No column name)
123456789 123-45-6789
56789 5-6789
456789 45-6789
6789 6789