我试图在select语句中打印日期,但我需要在输出中添加一个字母:
to_char(date_updated, 'YYYY-MM-DDTHH:mm:ss')
Run Code Online (Sandbox Code Playgroud)
Oracle不喜欢T.我只想让T输出像冒号和破折号.我可以用反斜杠或其他东西逃脱吗?
我有一个连接两个表的查询.一个表的列为varchar类型,另一个表的类型为number.我已经在3个oracle数据库上执行了我的查询,并且看到了一些我希望可以解释的奇怪结果.在两个数据库中,类似于以下工作.
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
Run Code Online (Sandbox Code Playgroud)
在此查询中,tableA.col1的类型为number,tableB.col2的类型为varchar.这在两个数据库中工作正常,但在第三个数据库中没有.在第三个我得到(ORA-01722)错误.在第三个我需要做的事情......
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=to_char(a.col1);
Run Code Online (Sandbox Code Playgroud)
这适用于所有数据库.我的问题是为什么?以上是一个简化的查询,真正的查询稍微复杂一点,并检索大量数据,因此第一个版本要快得多.如果我能让它在所有环境中工作那就太棒了.
有谁知道为什么这可能在某些oracle数据库中工作而不是没有在数据类型上强制转换的其他数据库?是否存在能够实现此类行为的全局设置?
我正在查询存储过程中的社会安全号码数据,我想将其格式化为我的存储过程中的社会安全号码.
如何在Oracle中格式化xxxxxxxxx xxx-xx-xxxx?
转换数字需要一些帮助:
select to_char(a, '99D99')
, to_char(a, '90D99')
from
(
select 50 a from dual
union
select 50.57 from dual
union
select 5.57 from dual
union
select 0.35 from dual
union
select 0.4 from dual
Run Code Online (Sandbox Code Playgroud)
将导致:
1 ,35 0,35
2 ,40 0,40
3 5,57 5,57
4 50,00 50,00
5 50,57 50,57
Run Code Online (Sandbox Code Playgroud)
但是如何使我的输出像:
我需要0
在逗号之前,但不是之后.
我不知道这是一个bug还是什么,但是当我尝试使用Oracle中的to_char函数以某种方式格式化星期几时,SQL Plus会给我这个错误:ORA-01821:日期格式无法识别
这是导致问题的一行
SELECT TO_CHAR(sysdate,'dsp') from dual;
Run Code Online (Sandbox Code Playgroud)
所以d是'星期几'而sp是拼写.这行应打印五行,因为我们是星期四.
这很奇怪,因为下一行有效
SELECT TO_CHAR(sysdate,'ddsp') from dual;
Run Code Online (Sandbox Code Playgroud)
dd是'每月的一天'所以sql加上打印二十九没有任何问题!!
有人能告诉我为什么这条线不起作用?
谢谢..
我收到了一个错误报告,其中Oracle 10g从to_char(datetime)
以下位置截断了返回值:
SQL> select to_char(systimestamp, '"day:"DD"hello"') from dual;
TO_CHAR(SYSTIMESTAMP,'"DAY:"DD"HE
---------------------------------
day:27hel
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这似乎不会发生在Oracle 11g中.我的问题是,它为什么会发生?是否有一些配置变量设置为告诉to_char(datetime)
为其返回值分配更大的缓冲区?
希望和容易调整。我用谷歌搜索并没有找到任何关于此的内容。我正在使用 DBvis Client 对 Postgres 数据库表运行查询。
我已经在 Oracle 和 PostgreSQL 查询中大量使用了 to_char() 函数,但我想我从未注意到这种行为。
SELECT TO_CHAR(created_at, 'Month DD, YYYY') AS DATE_CREATED...;
在结果集中,月份字段被填充到 9 个空格,然后是日和年:
February 26, 2018
January 01, 2000
July 23, 2014
September 01, 2015
December 15, 2015
May 31, 2016
Run Code Online (Sandbox Code Playgroud)
我现在从文档中知道这是month
格式的工作方式,但是有没有办法在没有额外填充的情况下获得完整的月份?我希望它看起来像这样:
February 26, 2018
January 01, 2000
July 23, 2014
September 01, 2015
December 15, 2015
May 31, 2016
Run Code Online (Sandbox Code Playgroud)
每个日期后跟一个文本字段的内容,我认为如果月和日之间只有一个空格,它们会更容易阅读。
May 31, 2016 This is my text notes for this record
该记录的日期部分不美观或不美观。
感谢您提供任何提示。
这个查询:
select nvl(0.75,0) from dual
Run Code Online (Sandbox Code Playgroud)
给我0.75
(数字),但这个查询:
select decode(1,0,null,0.75) from dual
Run Code Online (Sandbox Code Playgroud)
给我'.75'
(字符串).
为什么?
我试图通过将第二个查询更改为:
select decode(1,0,null,to_char(0.75,'0.99')) from dual
Run Code Online (Sandbox Code Playgroud)
但在我的实际代码中,0.75将是一个字段(NUMBER),可能有不同的小数位数,我不想添加/删除该值的任何内容.
有关如何修复缺失零问题但仍支持所有可能的小数长度的任何想法?
我在to_char()
这里面临货币格式问题.
以下代码对我有用:
SELECT TO_CHAR(10000,'L99G999D99MI',
'NLS_NUMERIC_CHARACTERS = ''.,''
NLS_CURRENCY = ''$''') "Amount"
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
这将为我提供输出:$10,000.00
.
现在,我希望将货币转换为法国货币,即期望产出10 000,00
或具有产出的瑞士货币10'000.00
.因此,对于上述两种情况,我修改了如下所示的代码:
SELECT TO_CHAR(10000,'L99G999D99MI',
'NLS_NUMERIC_CHARACTERS = ''"", ""''
NLS_CURRENCY = ''$'' ') "Amount"
FROM DUAL;
SELECT TO_CHAR(10000,'L99G999D99MI',
'NLS_NUMERIC_CHARACTERS = ''". "''
NLS_CURRENCY = ''$'' ') "Amount"
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
但是此代码不起作用并显示错误ORA-12702
.代码有问题吗?
我想将日期格式转换为YYYY-MM-DDThh:mm:ss.SSSXXXZ
(ISO 8601)。
得到了2021-02-10T04:02:55.55SXXXZ
,这是错误的。我需要它作为2021-02-10T04:02:55.55S000000Z
.
select to_char(now(), 'YYYY-MM-DDThh:mm:ss.SSSXXXZ')
Run Code Online (Sandbox Code Playgroud)