我的select语句返回一个长值列表,这些值不能用作substring中的表达式。 我的查询返回的值是9或10位数。如果它是9位数长,例如123456789我希望结果像0-123-456-789其他10位数字如3123456789我希望它为3-123-456-789。
是否有任何功能,如'正确'或'左',可以类似于子串使用,即3个参数,其中I可以提到起点。
只需指向正确的方向,例如函数名称或在select语句中使用格式化函数的正确方法。
答案 0 :(得分:1)
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