`
plume521
  • 浏览: 3984 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL基本函数(to_char,trunc)

阅读更多

一、to_char函数

Parameter    Explanation
YEAR           Year spelled out
YYYY           4 digits of year
YYY            3 digits of year
YY             2 digits of year
Y              1 digit of year
IYYY           4digits year based on the ISO standard
IYY            3 digits of ISO year
IY             2 digits of ISO year
I              1 digit of ISO year
Q              Quarter of year (1 .. 4)
MM             Month (01 ..12)
MON            Abbreviated name of month
MONTH          Name of month, padded with blanks to length of 9 characters.
RM             Roman numeral month (I .. XII)
WW             Week of year (1-53) where 7 days 1 week (与星期几无关)
W              Week of month (1-5) where 7 days 1 week (与星期几无关)
IW             Week of year (1-52 or 1-53) based on the ISO standard.
               (周一到周日为一周,若1日为周五-周日,则为上年最后一周)
D              Day of week (周日1 .. 周六7)
DY             Abbreviated name of day.
DAY            Name of day
DD             Day of month (1-31)
DDTH           Day of month (1-31)
DDD            Day of year (1-366)
J              Julian day;the number of days since January 1, 4712 BC.
HH             Hour of day (1-12).
HH12           Hour of day (1-12).
HH24           Hour of day (0-23).
MI             Minute (0-59).
SS             Second (0-59).
SSSSS          Seconds past midnight (0-86399).
FF             Fractional seconds.
XXXXX          转换为8进制

to_char(1210.73, '9999.9')       would return '1210.7'
to_char(1210.73, '9,999.99')     would return '1,210.73'
to_char(1210.73, '$9,999.00')    would return '$1,210.73'
to_char(21, '000099')            would return '000021'
to_char(21, '999999')            would return '    21'
to_char(21, 'FM999999')          would return '21'
to_char(sysdate, 'FMYYY')        would return '8'          --FM表示去掉0或空格 

to_char(125, 'XXXXX')            would return '7D'
to_number('7D','XXXXX')          would return '125'


另注:trunc与to_char的比较

trunc原意为截取数据小数部分,例如:

trunc(23.48429387)    返回23
trunc(23.48429387,3)  返回23.484
trunc(-1.443432)      返回-1

但trunc(date) 具有与to_char(date) 相似的功能,但有区别:

trunc(sysdate,'cc')   取当世纪的第一天     to_char(sysdate,'cc')   取当世纪数值
trunc(sysdate,'yyyy') 取当年的第一天       to_char(sysdate,'yyyy') 取当年数值
trunc(sysdate,'iyyy') 取上年的最后一天     to_char(sysdate,'iyyy') 取当年数值
trunc(sysdate,'q')    取当季第一天         to_char(sysdate,'iyyy') 取当季数值
trunc(sysdate,'mm')   取当月第一天         to_char(sysdate,'mm')   取当月数值
trunc(sysdate,'ww')   取当周第一天(周二)   to_char(sysdate,'ww')   取当周数值(第几周)
trunc(sysdate,'iw')   取当周第一天(周一)   to_char(sysdate,'iw')   取当周数值(第几周)

总结:trunc对日期的截取由后面参数决定位置后将之后所有数值为默认初始值!



二、order by函数


-- 自动将结果列表按字段顺序对应排序

order by 1 , 2 , 3



-- 可对字段 decode 后再排序,下例为将 2222 、 1111 排在前两位,其他按顺序排列

select a,b, c from t1

order by decode(a, '2222' , 1 , '1111' , 2 ,a)



-- 如遇到空值时, order by 默认将空值排在最下面,如要排在最上面,则:

order by nulls first



三、取整类函数整理


ceil : 取整 ( 大 )

    select ceil (- 1.001 ) value from dual    /- 1

floor :取整(小)

    select floor(- 1.001 ) value from dual    /- 2

trunc :取整(截取)

    select trunc(- 1.001 ) value from dual    /- 1

round :取整 ( 舍入 )

select round(- 1.001 ) value from dual    /- 1

应用举例:(根据时间算年龄)
trunc(months_between( sysdate ,birthday)/ 12 ) Age


四、LPAD与RPAD的用法:

比较:select LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') from dual;
            |WhaT|               WhaT is tHis| -------------WhaT is tHis
     select RPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') from dual;
            |WhaT|  WhaT is tHis             | WhaT is tHis-------------

作用:作为调整格式的输出,例:



with x as

( select 'aa' chr from dual

union all

select 'bb' chr from dual)

select level ,chr,lpad( ' ' ,( level - 1 )* 5 , '-' )||chr other from x connect by level <= 3



说明:若LPAD对空字符串操作无效,因此至少必须有' '空格符!


LPAD的实际应用:



select distinct lpad(selltype, 2 , '0' ) from lccont;

由于系统中其他的selltype字段均为01、02等2位,但出现7,另有null值
所以使用 lpad(selltype,2,'0') 可以即保存null值又将7更新为07




五、rank() order by()和row_number() order by()的区别:



with t as (

select 1 a from dual

union all

select 2 a from dual

union all

select 1 a from dual

)

select a,rank() over( order by a) rank,row_number() over( order by a) num from t;







六、translate和replace的区别:



select translate('What is this','ait','-*%') from dual;---Wh-% *s %h*s

selectreplace('What is this','ait','-*%') from dual;-----What is this

selectreplace('What is this','hat','-*%') from dual;-----W-*% is this



translate的实际应用:

select translate('12XXX5869XXXX','0123456789'||'XXX5869XXXX','0123456789')from dual;

<取字符串中的所有数字>







七、sysdate与current_date的差别:



select sysdate,current_date from dual;

某些情况下current_date会比sysdate快一秒。

我们认为current_date是将current_timestamp中毫秒四舍五入后的返回

虽然没有找到文档支持,但是想来应该八九不离十。







八、一些有用的时间函数:



select NEXT_DAY(sysdate,5) from dual;--下一个星期四(不算今天)

select NEXT_DAY(sysdate,'星期三') from dual;--下一个星期一(大小写都可)

select LAST_DAY(sysdate) from dual;--当月最后一天







九、一些有用的数字/字符函数:



select GREATEST(a,b) Greatest from t2;----------求最大值

select LEAST(a,b) Greatest from t2;-------------求最大值

select NULLIF('a','b'),NULLIF('a','a') from dual;-------a=b则返回null;a<>b则返回a

select nvl(null,'a'),nvl('1','a') from dual;------------为null时返回a,不会null返回原值

select nvl2(null,'a','b'),nvl2('1','a','b') from dual;--为null时返回b,不为null返回a

selectCOALESCE(null,5,6,null,9) from dual;-----返回第一个非空值

select POWER(2.2,2.2) from dual;  ----a的b次方






十、一些有用的字符串操作函数:



select CHR(95) from dual;-------------ASCII码对应字符

select ASCII('_') from dual;----------字符对应ASCII码

select concat('aa','bb') from dual;------------等同于||

select INITCAP('whaT is this') from dual;------首字母大写,其余小写

select TO_MULTI_BYTE('ABC abc 中华') from dual;----------半角变全角

select TO_SINGLE_BYTE('ABC abc中华') from dual;------全角变半角

select VSIZE('abc中华') from dual;-----返回字节数

select INSTR('CORPORATE FLOOR','OR',3,2) from dual;----从第3位开始查找第2个'OR'






十一、WMSYS.WM_CONCAT函数应用:

此函数作用在于将某字段所有值列出到一个单元格中


select replace (WMSYS.WM_CONCAT(num), ',' , ' ' ) from t1;



行列转换中最简单的一种方法。





十二、单元格内文本换行的方法:

Tab键 chr(9)
换行符chr(10)
回车符chr(13)
空格符chr(32)

select 'a' ||chr( 9 )|| 'b' from dual;

select 'a' ||chr( 13 )|| 'b' from dual;
注:须在SQLPlus中查看结果,PL/SQL Developer中无法显示换行








-The End-
分享到:
评论

相关推荐

    oracle 数值型函数,字符型函数,日期函数,转换函数,to_char

    Oracle数据库提供了丰富的日期处理函数,如`ADD_MONTHS`, `MONTHS_BETWEEN`, `NEXT_DAY`, `LAST_DAY`, `TRUNC`, `ROUND`, `EXTRACT`, `TO_CHAR`等,用于执行日期加减运算、计算两个日期之间的间隔、提取日期部分、...

    Oracle to_char 日期转换字符串语句分享

    SQL&gt;select to_char(sysdate,’YYYY-MM-DD HH12:MI:SS AM’)from dual; TO_CHAR(SYSDATE,’YYYY-MM-DDHH1 —————————— 2007-06-29 02:50:06 下午 2》以24小时制显示 SQL&gt; select to_char(sysdate,’...

    Oracle to_date() 用法细节.txt

    通过本文的学习,我们不仅了解了 `to_date()` 函数的基本用法和参数格式,还深入探讨了日期格式掩码的意义及各种日期操作技巧。这对于日常开发工作中处理日期相关的问题有着重要的意义。此外,通过实际案例的演示,...

    Oracle特色函数与复杂更新应用.pptx

    常见的转换函数包括 TO_CHAR、TO_NUMBER、TO_DATE 等。 * TO_CHAR 函数:用于将日期或数字转换为字符类型。格式为 TO_CHAR(date, 'format_model'),其中 format_model 是一个字符串,指定了转换的格式。 * TO_...

    ORACLE常用日期函数集合

    在Oracle中,`to_char()`函数被广泛用于将日期转换为指定格式的字符串。以下是一些常见的格式化选项: 1. **年份格式** - `Y`: 返回世纪年的最后一位。 ```sql SELECT to_char(sysdate, 'Y') FROM dual; ``` -...

    oracle中关于取时间的SQL语句.pdf

    TO_NUMBER(TO_CHAR(TRUNC(SYSDATE, 'yyyy'), 'd')) year_week_day, ... FROM ... ``` 2. **计算当月的第几周**: 这个例子展示了如何找出指定日期在月份中的周数。首先,找到当月的第一天,然后计算该日期与...

    oracle日期函数集锦

    SELECT TO_CHAR(SYSDATE, 'Y') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL; ``` - 示例结果可能分别为 `7`、`07` 和 `007`。 2. **Q**:表示季度,取值...

    oracle sql 根据年份、周数取日期

    其中,`TO_DATE`和`TO_CHAR`是两个关键的函数: - **TO_DATE**:此函数用于将字符串转换为日期格式。语法如下:`TO_DATE(date_string, format_mask)`。其中`date_string`是要转换的字符串,`format_mask`定义了字符...

    Oracle中实现datadiff函数

    DATEDIFF('D', startDate, endDate) * 24 * 60 * 60 + (TO_NUMBER(TO_CHAR(CDateTime(endDate), 'SS')) - TO_NUMBER(TO_CHAR(CDateTime(startDate), 'SS'))) ELSE -29252888 END INTO reallyDoNumeric FROM ...

    ORACLE获取周月季年的第一天和最后一天

    SELECT TO_CHAR(TO_DATE(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyy-mm'), 'yyyy-mm'), 'yyyy-mm-dd hh24:mi:ss') FROM DUAL; -- 上月第一天 SELECT TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm'), 'yyyy-mm'), '...

    Oracle日期类型处理

    在SQL查询中,可以通过`TO_CHAR`函数将日期转换为不同的字符串格式以便于展示或进一步处理。 #### 二、常用日期操作 1. **获取当前系统日期:** - `SELECT SYSDATE FROM DUAL;` 这条语句用于获取当前系统的...

    Oracle_PL(SQL)单行函数和组函数及使用

    ### Oracle_PL(SQL)单行函数和组函数及使用 #### 一、概述 在Oracle数据库中,SQL 和 PL/SQL 提供了大量的内置函数,这些函数可以极大地提高开发效率和简化查询逻辑。根据处理数据的不同方式,这些函数可以分为...

    ORACLE sql 星期几 一个月的第几天等 方法

    可以使用 TO_CHAR 函数将日期格式化为字符串,然后使用 DY format model 来获取星期几。例如: ```sql SELECT TO_CHAR(SYSDATE,' DY ') FROM DUAL; ``` 这将返回当前日期的星期几,例如 "TUE" 代表星期二。 2. 使用...

    Oracle内置SQL函数-分类整理大全

    本文将深入探讨Oracle内置的SQL函数,这些函数极大地丰富了数据查询、处理和分析的能力。 一、数学函数 Oracle提供了丰富的数学函数,如ROUND、TRUNC、MOD、SQRT等。ROUND用于四舍五入,例如ROUND(123.456, 2)将...

    Oracle时间操作

    Oracle的时间操作不仅限于这些,还包括其他函数,如`extract`用于提取日期的特定部分,`round`和`trunc`用于对日期进行四舍五入或截断,`to_date`用于将字符串转换为日期,以及`to_timestamp`和`to_char`用于时间戳...

    ORACLE与SQLSERVER函数异同比较

    - **二进制转十六进制**: Oracle中的`RAW_TO_HEX`函数与SQL Server中的`CONVERT`函数有类似功能。 总结来说,尽管Oracle和SQL Server在函数的具体实现和语法上有所不同,但它们都提供了广泛的功能来支持日常的...

    不同条件的日期查询 和同年查询

    在 SQL 中,可以通过 `EXTRACT` 或 `TO_CHAR` 函数提取日期的不同部分,如年、月、日等。 **示例 SQL 语句:** ```sql SELECT EXTRACT(YEAR FROM SYSDATE) AS year, EXTRACT(MONTH FROM SYSDATE) AS month, EXTRACT...

    Oracle的to-date函数.pdf

    Oracle的`to_date`函数是用于将字符串转换为日期的函数,它是Oracle SQL中处理日期和时间数据的重要工具。在Oracle数据库中,日期和时间的表示方式有很多种,`to_date`函数允许我们根据特定的格式将文本字符串转化为...

    ORACLE日期函数01课程.pdf

    在Oracle中,`TO_DATE`和`TO_CHAR`是两个核心的日期转换函数,它们分别用于将字符串转换为日期和将日期转换为字符串。 1. `TO_DATE`函数: `TO_DATE`函数用于将一个字符串转换为日期格式。例如,`to_date('2007-11...

Global site tag (gtag.js) - Google Analytics