如何在 SQL Server 2005 DB 中使用 T-SQL 将 NVARCHAR 字段填充为零?

发布于 2024-07-26 21:22:02 字数 348 浏览 4 评论 0原文

我有一个订单表,将订单号存储为 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

相思碎 2024-08-02 21:22:02

这是关于 的精彩填充教程小于点

DECLARE @Numbers TABLE
(Num INT) 

INSERT @Numbers VALUES('1')
INSERT @Numbers VALUES('12')
INSERT @Numbers VALUES('123')
INSERT @Numbers VALUES('1234')
INSERT @Numbers VALUES('12345')
INSERT @Numbers VALUES('123456')
INSERT @Numbers VALUES('1234567')
INSERT @Numbers VALUES('12345678')   

SELECT RIGHT(REPLICATE('0', 8) + CONVERT(NVARCHAR(8),Num),8) FROM @Numbers

这将导致:

00000001
00000012
00000123
00001234
00012345
00123456
01234567
12345678

Here's a great padding tutorial on LessThanDot.

DECLARE @Numbers TABLE
(Num INT) 

INSERT @Numbers VALUES('1')
INSERT @Numbers VALUES('12')
INSERT @Numbers VALUES('123')
INSERT @Numbers VALUES('1234')
INSERT @Numbers VALUES('12345')
INSERT @Numbers VALUES('123456')
INSERT @Numbers VALUES('1234567')
INSERT @Numbers VALUES('12345678')   

SELECT RIGHT(REPLICATE('0', 8) + CONVERT(NVARCHAR(8),Num),8) FROM @Numbers

This will result in:

00000001
00000012
00000123
00001234
00012345
00123456
01234567
12345678
香橙ぽ 2024-08-02 21:22:02

不要这样做!将值存储为 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!)

冷情 2024-08-02 21:22:02

我只是偶然发现了这个,我知道很久以前就已经有人问过这个问题了,但由于我知道一个不同的、可能更简单的解决方案,所以我决定分享。

注意:这仅适用于您要填充的仅包含数字字符的列。 这是因为 STR() 函数采用浮点数作为第一个参数,任何字符串在再次转换为更长的字符串之前都将转换为浮点数。

基本上 - 这:

SELECT REPLACE(STR('872', 8), ' ', '0')

将输出 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:

SELECT REPLACE(STR('872', 8), ' ', '0')

will output 00000872

好听的两个字的网名 2024-08-02 21:22:02

您可以将 NVARCHAR 转换为 INT,然后排序将按照您的意愿进行。 我假设订单号仅包含数字字符。

ORDER BY
    CAST(OrderNumber AS 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.

ORDER BY
    CAST(OrderNumber AS INT)
方圜几里 2024-08-02 21:22:02

这基本上是对 pcampbell 给出的答案的重写,但使用了我发现更容易移植到其他 SQL 产品的函数:CAST 而不是 CONVERT 等:

SELECT CAST(REVERSE(CAST(REVERSE(CAST(Num AS NVARCHAR(9))) + '000000000' AS NCHAR(9))) AS NVARCHAR(9))
       AS value_padded
 FROM Numbers;

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 than CONVERT etc:

SELECT CAST(REVERSE(CAST(REVERSE(CAST(Num AS NVARCHAR(9))) + '000000000' AS NCHAR(9))) AS NVARCHAR(9))
       AS value_padded
 FROM Numbers;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文