帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Padding  String  str  PAD  


介绍

今天,我在SQL中使用字符串操作有很多乐趣。 问题是我有一个 TotalHours 字段,格式为" 37.50"? 每星期 37小时半。 这需要转换成 4字符代码" 3750。 最初我取了左 2字符和右 2字符,并将它们加入到一个新的字段中。 在我注意到一些懒惰的人每周只有 5小时的时候,这工作正常。 这仍然显示为 5.00。 在任何正常语言中,你可以在字符串中搜索字符,然后在位置创建子字符串。 这是用 SUBSTRINGCHARINDEX 在SQL中实现的。

下一个问题是填充结果字符串,因此它总是 4个数字字符。 这不容易,因为SQL似乎缺少一些有用的Oracle填充功能。 这是我使用神秘命名 STUFF 函数的解决方法。

declare@hoursintdeclare@outputlengthtinyintset@outputlength = 4set@hours = 500print stuff(replicate('0', @outputlength), _
 @outputlength - len(@hours)+1, len(@hours), cast(@hours as varchar(10))
)

你将看到,这将创建一个长度为 4个字符的字符串,其中填充了填充" 0"? 然后使用 REPLICATE 函数,通过从所需的@OUTPUTLENGTH 中减去 @HOURS 输入的长度来找到 delete 函数的起始点。 接下来指定删除的长度,这是我们正在添加的字符串的长度。 最后我们将 @HOURS int 转换为 varchar 并将它的粘贴到末尾。

结果
"0500?

我对其他方法做了一些React。 为了节省你从下面的部分选择,下面列出了好的。

Seanf给了我们:

select hours,right('0000' + convert(hours * 100.0,sql_varchar),4) as other

你可以看到,这是一个比我更简单的解决方案。

Ewout Stortenbeker给了我们:

selectright('0000' + replace(@input, '.', ''), 4)

你不能比那更好。 它甚至可以删除小数位或者任何你所拥有的分隔符。 所以如果我同样要做同样的事情,我会使用Ewouts解决方案。 感谢大家的评论。

有关其他提示和技巧,请访问 www.chemlock.co.uk 以及我在 life ( 不在二进制中) 中的输出。



文章标签:str  String  PAD  Padding  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语