gpt4 book ai didi

sql - 在 SQL 中右对齐数字的最佳实践

转载 作者:行者123 更新时间:2023-12-01 04:22:21 32 4
gpt4 key购买 nike

在 TSQL 中右对齐数字的最佳做法是什么?

我必须格式化一个固定长度的提取文件,并且需要将数字字段正确对齐。 (我使用的是 SQL Server 2005)

我找到了 this ,这看起来很简单。

right('            '+convert(varchar(20),a.num),12)

这是完整的 Select 语句
select
a.num,
fixed_number =
right(' '+convert(varchar(20),a.num),12)
from
(
--Test Data
select num = 2400.00 union all
select num = 385.00 union all
select num = 123454.34
) a

Results:

num fixed_number
---------- ------------
2400.00 2400.00
385.00 385.00
123454.34 123454.34

(3 row(s) affected)

我问这个问题是因为我在工作中发现了这行代码,它看起来非常复杂(它还删除了小数和零填充)
CAST(REPLACE(REPLICATE('0', 12 - LEN(REPLACE(CAST(CONVERT(DECIMAL(10,2),@DD8DBAMT) AS VARCHAR),'.',''))) 
+ CAST(CONVERT(DECIMAL(10,2),@DD8DBAMT) AS VARCHAR),'.','') AS VARCHAR(12))

更新:

Daniel Pratt 使用函数的想法让我看到了 SQL# (我们拥有)。它有一个名为 PadLeft 的函数,令人惊讶的是,它具有与 Daniel Pratt 在下面的回答中定义的 fn_PadRight 函数相同的参数和功能。

下面是如何使用 SQL# 函数:
DECLARE @F6D2 AS DECIMAL(8,2)
SET @F6D2 = 0
SQL#.String_PadLeft(@F6D2,9,' ')
SQL#.String_PadLeft(123.400,9,' ')
SQL#.String_PadLeft('abc',9,' ')

它可以接受数字和字符串。

最佳答案

您不喜欢我的回答,但最佳做法是在 SQL 以外的其他地方执行此操作。 SQL 旨在存储检索和处理数据,而不是将其可视化。不格式化显示。恕我直言,如果有一个控制台应用程序可以提取数据然后生成文件,那会好得多。

但是,当我之前这样做时,我是这样做的:

declare @num int
set @num=1555
select replicate(' ',20-len(cast(@num as varchar))) + cast(@num as varchar)

硬编码空间太糟糕了,这可能会因为大量而中断,但是如果您生成固定文件,您无论如何都会为大量生成垃圾

编辑

Ken 我确实阅读了 ops 帖子,是的,他正在将数据格式化为固定宽度的文件。关键是您应该在应用程序层中进行格式化,而不是在 SQL 中。是的,没有人在视觉上查看数据,但我想我觉得您仍在格式化数据,我们可能正在 split 。

关于sql - 在 SQL 中右对齐数字的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/655841/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com