如何在 SQL Server 2005 DB 中使用 T-SQL 将 NVARCHAR 字段填充为零?
我有一个订单表,将订单号存储为 NVarChar。 我们通过按降序查询最大订单号并返回前 1 个然后加 1 来手动增加订单号。我们已在 Microsoft CRM 4.0 中实现了此功能。
例如订单号 (NVarchar)
99
456
32
当我查询上述值时,它返回 99 而不是 456。我想使用 SQL Server 2005 中的 sql 脚本将所有当前订单号填充为 000099 或 000456 之类的值。所以上面的示例是
000099
000456
000032
我需要编写什么 SQL 脚本才能完成此任务?
I have an Orders table that stores the Ordernumber as NVarChar. We manually increment the order number by querying for the biggest order number ordering in descending order and returning the top 1 and then adding 1. We have this implemented in Microsoft CRM 4.0.
e.g Order Numbers (NVarchar)
99
456
32
When I query the above values it returns 99 instead of 456. I want to pad all of the current order numbers to something like 000099 or 000456 using a sql script in SQL server 2005. So the above example would be
000099
000456
000032
What SQL script would I have to write to accomplish this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这是关于 的精彩填充教程小于点。
这将导致:
Here's a great padding tutorial on LessThanDot.
This will result in:
不要这样做!将值存储为 INT。 如果您使用字符串,您将永远陷入用零填充的困境。 如果您决定将零存储在字符串中,您仍然需要用零填充用户输入来查询它(或者使用类似 '%'+@x+'%',哎呀!)
don't do it this way! store the values as INTs. You'll be forever trapped padding with zeros if you use strings. If you decide to store the zeros in the strings, you'll still have to pad user input with zeros to query for it (or use like '%'+@x+'%', yikes!)
我只是偶然发现了这个,我知道很久以前就已经有人问过这个问题了,但由于我知道一个不同的、可能更简单的解决方案,所以我决定分享。
注意:这仅适用于您要填充的仅包含数字字符的列。 这是因为 STR() 函数采用浮点数作为第一个参数,任何字符串在再次转换为更长的字符串之前都将转换为浮点数。
基本上 - 这:
将输出 00000872
I just stumbled upon this and I know that it has been asked quite a long time ago, but since I know a different, possibly simpler solution, I decided to share.
NOTE: This will work only for columns that you want to pad contain only numerical characters. This is due to the fact, that the STR() function takes a float as the first parameter and any strings will be converted to float before converting to longer strings again.
Basically - this:
will output 00000872
您可以将 NVARCHAR 转换为 INT,然后排序将按照您的意愿进行。 我假设订单号仅包含数字字符。
You could CAST the NVARCHARs to INTs and then ordering will work as you want. I'm assuming that Order Numbers contain only numerical characters.
这基本上是对 pcampbell 给出的答案的重写,但使用了我发现更容易移植到其他 SQL 产品的函数:
CAST
而不是CONVERT
等:This is basically a re-write of the answer given by pcampbell but using functions that I've found port to other SQL product more easily:
CAST
rather thanCONVERT
etc: