sql查询获取静态结果

时间:2017-05-28 18:03:15

标签: sql sql-server sql-server-2008 ssis-2012

我有一个数字数据: 123456789

我需要将其转换为: 123-45-6789

如果我的数据如下:56789和456789 它应该转换为:5-6789和-45-6789

我需要一个sql查询来根据数据自动获取(列)。

4 个答案:

答案 0 :(得分:0)

您不应该使用sql格式化结果,例外是日期和时间。您应该在代码中格式化结果

答案 1 :(得分:0)

您似乎想要从字符串的末尾开始计算。我会建议这样的事情:

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)

答案 2 :(得分:0)

这样的东西?:

select FORMAT(@yourNumber, N'###-##-####')

您可以在此处找到有关FORMAT方法的更多信息: https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql

答案 3 :(得分:0)

又一个选择

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

返回

SomeCol     (No column name)
123456789   123-45-6789
56789       5-6789
456789      45-6789
6789        6789