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