- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含数字列的表,我正在尝试使用 oracle sql 函数 to_char 对其进行格式化。根据列的显示方式,结果是否会出现尾随空白。
SELECT
'[',TO_CHAR(ABS(Balance), 'FM0000000000000000V00'),']',
'[' || TO_CHAR(ABS(Balance),'FM0000000000000000V00') || ']'
FROM Accounts
会得到以下结果:
[;000000000749460366 ;];[000000000749460366]
[;000000008751094792 ;];[000000008751094792]
[;000000000000050696 ;];[000000000000050696]
[;000000000000000000 ;];[000000000000000000]
我希望在这两种情况下得到相同的结果,但我不明白为什么会有差异。我有这些差异的原因是什么?
非常感谢,皮埃尔-伊夫
最佳答案
它不会在 值 中添加尾随空格 - 如果您检查它的长度,它仍然是 18,如果是,那么连接后的版本也会有一个空格。该列的元数据决定最大可能长度为 19,如果原始余额值超过 16 位,这似乎是正确的:
set colsep ;
with accounts(balance) as (
select 749460366 from dual
union all select 1234567890123456 from dual
union all select 12345678901234567 from dual
)
SELECT
'[',TO_CHAR(ABS(Balance), 'FM0000000000000000V00') as balance,']',
'[',length(TO_CHAR(Balance, 'FM0000000000000000V00')) as length,']',
'[' || TO_CHAR(ABS(Balance),'FM0000000000000000V00') || ']'
FROM Accounts;
';BALANCE ;';'; LENGTH;';'['||TO_CHAR(ABS(BALA
-;-------------------;-;-;----------;-;---------------------
[;000000074946036600 ;];[; 18;];[000000074946036600]
[;123456789012345600 ;];[; 18;];[123456789012345600]
[;###################;];[; 19;];[###################]
提供的格式无法显示 17 位数字的值,它用哈希值代替;但有趣的是,其中有 19 个,无论实际余额有多大。
FM
修饰符抑制正值的前导空格;但是如果你有一个负的 16 位数字,你仍然需要 19 位数字来显示它,因为减号会出现。 您知道由于 ABS()
调用,该值不能为负,但 TO_CHAR()
函数不知道,所以它仍然必须允许列宽中的减号。
如果您真的从应用程序运行查询/转换,例如通过 JDBC,您返回的字符串(少于 17 位,在 ABS()
之后)将是 18 个字符,并且不会有(不存在的)尾随空格。
您的客户端(或者至少是 SQL*Plus 和 SQL Developer)正在根据它认为可能的最宽值来格式化列宽。你可以覆盖它:
column balance format A18
with accounts(balance) as (
select 749460366 from dual
union all select 1234567890123456 from dual
union all select 12345678901234567 from dual
union all select 123456789012345678 from dual
)
SELECT
'[',TO_CHAR(ABS(Balance), 'FM0000000000000000V00') as balance,']',
'[',length(TO_CHAR(Balance, 'FM0000000000000000V00')) as length,']',
'[' || TO_CHAR(ABS(Balance),'FM0000000000000000V00') || ']'
FROM Accounts;
';BALANCE ;';'; LENGTH;';'['||TO_CHAR(ABS(BALA
-;------------------;-;-;----------;-;---------------------
[;000000074946036600;];[; 18;];[000000074946036600]
[;123456789012345600;];[; 18;];[123456789012345600]
[;##################;];[; 19;];[###################]
;# ; ; ; ; ;
[;##################;];[; 19;];[###################]
;# ; ; ; ; ;
... 这使得非空格消失,但如果/当原始值超过 16 位数字时,它会把额外的散列包装到下一行时会变得更加困惑。
您还可以将结果显式转换为您期望的长度:
clear columns
with accounts(balance) as (
select 749460366 from dual
union all select 1234567890123456 from dual
union all select 12345678901234567 from dual
union all select 123456789012345678 from dual
)
SELECT
'[',CAST(TO_CHAR(ABS(Balance), 'FM0000000000000000V00') as varchar2(18)) as balance,']',
'[',length(TO_CHAR(Balance, 'FM0000000000000000V00')) as length,']',
'[' || TO_CHAR(ABS(Balance),'FM0000000000000000V00') || ']'
FROM Accounts;
';BALANCE ;';'; LENGTH;';'['||TO_CHAR(ABS(BALA
-;------------------;-;-;----------;-;---------------------
[;000000074946036600;];[; 18;];[000000074946036600]
[;123456789012345600;];[; 18;];[123456789012345600]
[;##################;];[; 19;];[###################]
[;##################;];[; 19;];[###################]
关于sql - oracle sql TO_CHAR 函数在某些情况下添加尾随空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39327055/
考虑 this link来自 Bit Twiddling Hacks 网站。为了计算尾随位,使用了以下算法: unsigned int v; // 32-bit word input to
我正在开发一个在输出目录中创建多个文件的 makefile。为了创建这些文件,输出目录需要已经存在,否则文件创建失败。 这是一个演示我遇到的问题的最小示例: .PHONY: default defau
我试图让 TextField 的值以尾随对齐方式显示。 如您所见,值 34.3 以前导对齐方式显示。 我确信我遗漏了一些明显的东西,但我不知道是什么。有什么想法吗? @State private va
我想让我的 StackView 在屏幕上居中,并在每边(左和右)添加一个 20 的填充以获得屏幕边距: 但不考虑左边距: 结果如下: 如何处理右边距?对于其他类型的对象(不是 StackView),我
我们在我们的网站上使用漂亮的网址。几年前我有一个外部技术人员添加反向链接。他做得很好,但在一个案例中,他总是添加一个尾随空格字符的链接。 https://www.example.com/item/it
我正在设计一个带前缀的可变长度整数。 Rust 具有计算前导和尾随 1 和 0 的方法:https://doc.rust-lang.org/std/primitive.u64.html#method.
Passing a lambda to the last parameter In Kotlin, there is a convention that if the last parameter o
我需要正则表达式的帮助来从字符串中去除不需要的字符(在 Java 中)。我用 4 个正则表达式解决了这个问题。替换将被多次调用 [peeks: 50+ times/sec] 它并降低性能。但我认为它肯
如果我用 base64 编码一个由七个字符组成的字符串,例如abcdefg 与网站 https://www.base64encode.org/结果是 YWJjZGVmZw==。尾部的“==”字符被填充
尝试在客户端上使用 sprintf 打印出包含缓冲区的 char[]。最后一个字符是“\0”。这是我的服务器代码: char buffer[MAXDATASIZE]; char res[MAXDATA
我在 angular2 项目中遇到问题,我正在生成一个要通过电子邮件发送给用户的 URL。电子邮件中的 URL 需要包含一个特殊 ID,该 ID 在路由器中传递为: { 路径:somepath/:id
我正在尝试删除所有前导和尾随 在使用 PHP 的字符串中。 举个例子 Hello World This is a message... 我想回去 Hello World This is a mes
我有一个 JSON 输出,我想稍微修改一下: JSON={"type":"global", "elements":[ {"type":"car","model":"bmw", "element
继续阅读 ranges-v3 库,我意识到所有关于模板类型有效表达式的检查都有一个尾部 ", 42"表达式,我想知道这样做的目的是什么。例如: namespace concepts { con
我使用的是最新版本的 Xcode (11 Beta 16) 和 macOS (10.15 Beta 6) 我正在尝试创建两个 View 。从第一个 View ,您应该能够通过尾随导航栏项目导航到第二个
我在使用 SwiftUI 时遇到性能问题 List有大量数据。我创建了一个演示应用程序只是为了展示 500_000 String 的问题s 并显示其中一个的尾随 Action ,CPU 将在几秒钟内达
我正在使用 Blue River 的最新 docker 镜像,运行 docker-compose 启动它并在 Mura CMS 中部署一个站点包。 问题是,当我访问 URL 后面没有正斜杠的页面时,我
我是一名优秀的程序员,十分优秀!