当前位置: 首页 > 知识库问答 >
问题:

如何在sql中使用substr函数with to\u date?

阎德宇
2023-03-14

查询是:

select substr(to_date('01-02-2018','mm-dd-yyyy'),4,3) from dual;

输出为:

JAN

有人能解释一下输出是怎么来的吗?

共有1个答案

柯骏
2023-03-14

当您将文本函数直接应用于日期数据类型的内容时,您会强制将日期隐式转换为字符串。此转换使用NLS\U DATE\U FORMAT参数来确定输出字符串的格式。

实际上,

substr(to_date('01-02-2018','mm-dd-yyyy'),4,3)

与相同

substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), <NLS_DATE_FORMAT>),4,3)

NLS_DATE_FORMAT参数的通常默认值(对于数据库的英语版本)是DD-MON-RR-听起来NLS_DATE_FORMAT参数的值设置为,这意味着您的查询正在执行

substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), 'DD-MON-RR'),4,3)

因此,substr正在处理字符串02-JAN-18,从第4个字符开始的3个字符是JAN。

与其在约会时使用substr,不如使用to_char,例如:

to_char(to_date('01-02-2018', 'mm-dd-yyyy'), 'MON')
 类似资料:
  • 本文向大家介绍SQL函数substr使用简介,包括了SQL函数substr使用简介的使用技巧和注意事项,需要的朋友参考一下 substr(string ,1,3) 函数解读:取string 中重左往右取3字长的字符串。 结果为:str 从右往左呢? 应该有另一个函数来提供这样的功能吧! 事实上,从右往左也是这个函数 只是参数的不同而已。 substr(String,-1,3) 功能解读:取stri

  • 问题内容: 我需要在Netbeans 7.2的小型本地JavaDB中进行SQL调用,以从数据库中提取单个随机行。 到目前为止,我已经可以使用RANDOM()函数来工作了,但是我无法使LIMIT 1正常工作,它返回了语法错误。 我知道每个数据库都有不同的方法来执行此操作,而且我无法弄清楚它如何专门用于Netbeans中的JavaDB(我知道它可以在具有不同语法的单独Oracle DB中工作)。 是否

  • 问题内容: 这是我使用的代码 我试图在客户表中的TotalP字段中设置一个值x。值x等于“产品”表中“客户ID”相同的对应价格的总和。 上面的代码返回错误 问题答案: 您可以使用DSum: 但是,这确实引发了一个问题,即当可以从查询中获取信息时,为什么要使用计算值来更新表。

  • 问题内容: 我已经在SQL中创建了一个函数,现在我需要在C#应用程序中使用该函数。 我尝试使用类似的方法,但由于得到以下内容,看来我做错了: …当我给出第一个参数和第二个参数时 这是我正在谈论的代码: 我的函数接受两个整数参数并返回一个表。我在Visual Studio中对其进行了检查,并且可以正常工作,但是无法在我的应用程序中正常工作。 这是我的函数声明: 问题答案: 您的SQL有点过时了,应该

  • 问题内容: 首先,这是分配的一部分。 我正在尝试使用COUNT函数作为与Northwind数据库有关的查询的一部分。查询应返回CustomerID,CompanyName和 为每个相应的客户下的订单数 。 当然,前两部分很简单,但是我无法让COUNT函数正常工作。到目前为止,我的查询是: 以这种方式使用COUNT的正确语法是什么?它看起来像: 到目前为止,所有示例都单独使用了COUNT函数,而不是

  • 我有一张这样的桌子: 我想加上宽限期分数,条件是每个学生的总宽限期分数最多为6分,如果候选人在EC1中的28分和EC2中的27分两个科目中不及格,那么在加上宽限期EC1=30和EC2=30后,他是通过的。如果他在EC1中有25分,在EC2中有28分,那么需要的宽限期分数是5 2=7。因此,他是不及格的,没有宽限期分数,宽限期分数可以添加到最多两个科目。如果他在两个科目中不及格,那么他是不及格的,没