选择“长”'使用Substring或Right / Left格式化输出的数据类型

时间:2015-01-05 16:36:55

标签: sql-server regex

我的select语句返回一个长值列表,这些值不能用作substring中的表达式。 我的查询返回的值是9或10位数。如果它是9位数长,例如123456789我希望结果像0-123-456-789其他10位数字如3123456789我希望它为3-123-456-789。

是否有任何功能,如'正确'或'',可以类似于子串使用,即3个参数,其中I可以提到起点。

只需指向正确的方向,例如函数名称或在select语句中使用格式化函数的正确方法。

2 个答案:

答案 0 :(得分:1)

使用StuffRight字符串函数执行此操作。

DECLARE @digits Bigint=3123456789

SELECT Stuff(Stuff(Stuff(RIGHT('0'+ convert(varchar(10),@digits),10),2,0, '-'),6,0, '-'),10,0,'-') 

结果: 3-123-456-789

答案 1 :(得分:1)

重要说明:格式化应该留给您的表示层,而不是数据库。

话虽如此,如果您决定格式化值,那么您将不得不首先将它们转换为字符串!

SELECT your_field As original_value
     , Cast(your_field As varchar(10)) As stringified
     , '0000000000' + Cast(your_field As varchar(10)) As pad_with_zeroes
     , Right('0000000000' + Cast(your_field As varchar(10)), 10) As trim_to_ten_characters
FROM   your_table

然后您的格式变得简单:

SELECT original_value
     , trim_to_ten_characters
     , SubString(trim_to_ten_characters, 1, 1)
     + '-'
     , SubString(trim_to_ten_characters, 2, 3)
     + '-'
     , SubString(trim_to_ten_characters, 5, 2)
     + '-'
     , SubString(trim_to_ten_characters, 8, 3) As formatified
     , Stuff(Stuff(Stuff(trim_to_ten_characters, 8, 0, '-'), 5, 0, '-'), 2, 0, '-') As alternative_method
FROM   (
        <that query from above>
       ) As aliased_query