`

函数---to_char,RANK()和dense_rank(),rollup,cube

阅读更多
TO_CHAR(<x> [,<fmt >[,<nlsparm>] ])

SELECT TO_CHAR(SYSDATE,'Day Ddspth,Month YYYY'
,'NLS_DATE_LANGUAGE=German') Today_Heute
FROM dual;

SELECT TO_CHAR(SYSDATE
,'"On the "Ddspth" day of "Month, YYYY')
FROM dual;
这里的Dd和DD意思一样,不同点是单词首字母大写,其他小写

TO_CHAR(SYSDATE,'"ONTHE"DDSPTH"DAYOF"MONTH,Y
--------------------------------------------
On the Twenty-Seventh day of November , 2002

SP 数字的拼写 ---spelling out
TH 数字的序数词 
spth 使用序数词来拼写,如12--->twelve(sp方式) -->Twelfth (spth方式)

SELECT SYSDATE
,TO_CHAR(SYSDATE,'Mmspth') Month
,TO_CHAR(SYSDATE,'DDth') Day
,TO_CHAR(SYSDATE,'Yyyysp') Year
FROM dual;
SYSDATE     MONTH    DAY  YEAR
----------- -------- ---- -------------------------------------
01-DEC-1999 Twelfth 01ST One Thousand Nine Hundred Ninety-Nine

其中01ST是数字的序数词,Twelfth 是数字被拼写后的序数词
Yyyy就是YYYY,但是每个单词首字母大写,其他小写

SELECT TO_CHAR(SYSDATE,'MONTH') upperCase
,TO_CHAR(SYSDATE,'Month') mixedCase
,TO_CHAR(SYSDATE,'month') lowerCase
FROM dual;
UPPERCASE MIXEDCASE LOWERCASE
--------- --------- ---------
DECEMBER December december


Date Format Codes
Date Code     | Format Code Description     | Example
AD or BC        Epoch indicator              ‘YYYY AD’ = 2002 AD
A.D. or  B.C.   Epoch indicator with periods ‘YYYY A.D.’ = 2002 A.D.
AM or PM        Meridian indicator           ‘HH12AM’ = 09AM
A.M. or P.M.    Meridian indicator with periods ‘HH A.M.’= 09 A.M.
DY              Day of week abbreviated        Mon, Tue, Fri
DAY             Day of week spelled out        Monday, Tuesday, Friday
D               Day of week (1–7)             1,2,3,4,5,6,7
DD              Day of month (1–31)           1,2,3,4…31
DDD             Day of year (1–366)           1,2,3,4…366
FF              Fractional seconds             .34127
J               Julian day (days since 4712BC) 2451514,2451515,2451516
W               Week of the month (1–5)       1,2,3,4,5
WW, IW          Week of the year, ISO week of the year 1,2,3,4…53
MM              Two-digit month                01,02,03…12
MON             Month name abbreviated        Jan, Feb, Mar…Dec
MONTH           Month name spelled out        January, February…
Q               Quarter                       01-Jan-2002
RM              Roman numeral month (I–XII)  I,II,III,IV,V…XII
YYYY,YYY,       Four-digit year; last 3, 2, 1  1999, 999, 99, 9
 YY, Y          digits in the year             2000, 000, 00, 0
YEAR            Year spelled out              Two thousand two
SYYYY If BC,    year is shown as negative      -1250
RR              Used for data input with only  See description 
                two digits for the year        following table
HH, HH12        Hour of the half-day (1–12)   1,2,3…12
HH24            Hour of the day (0–23)        0,1,2…23
MI              Minutes of the hour (0–59)    0,1,2…59
SS              Seconds of the minute (0–59)  0,1,2…59
SSSSS           Seconds of the day (0–86399)  0,1,2…86399
TZD             Time zone daylight savings;    CST
                must correspond to TZR         
TZH             Time zone hour, together        07
                with TZM is time zone offset
TZM             Time zone minute, together      00
                with TZH is time zone offset   
TZR             Time zone region          US/Central, Mexico/BajaNorte
, . / - ; :     Punctuation                    Literal display
‘text’          Quoted text Literal             display



SELECT TO_CHAR(123456,'9.99EEEE')
,TO_CHAR(123456,'9.9EEEE')
FROM dual;
TO_CHAR(12 TO_CHAR(1
---------- ---------
1.23E+05 1.2E+05


SELECT TO_CHAR(-1234.56,'C099G999D99MI','NLS_NUMERIC_CHARACTERS='',.''
NLS_CURRENCY=''DM''NLS_ISO_CURRENCY=''GERMANY''') Balance
FROM dual;

BALANCE
--------------
DEM001.234,56-

其中C 代表使用ISO international currency symbol (format symbol C).
For example, the NLS_CURRENCY symbol for U.S. dollars is $, but this
symbol is not uniquely American, so the ISO symbol for U.S. dollars is USD.


Numeric
 Code|Format Code Description                  |Example
9     Numeric digits with leading space if      9999.9 = 1234.5
      positive and a leading – (minus) if      9999.9 = -1234.5
      negative.                                 9999.9 = .3
0     Leading and/or trailing zeros.            0009.90 = 0012.30
代表一位数字,在相应的位置上如果没有数字则出现0
,     Comma, for use as a group separator.      9,999.9 = 1,234.5
      It cannot appear after a period or
      decimal code.
G     Local group separator, could be comma     9G999D9 = 1,234.5
       (,) or period (.).                       9G999D9 = 1.234,5
      分组分隔符(使用本地化)
.     Period, for use as the decimal character. 9,999.9 = 1,234.5
      It cannot appear more than once or to
      the left of a group separator.
D     Local decimal character, could be         9G999D9 = 1,234.5
      comma (,) or period (.).                  9G999D9 = 1.234,5
      小数点(使用本地化)
$     Dollar-sign currency symbol.              $999 = $123
L     Local currency symbol.                    L999 = $123
                                               L999 = Euro123
FM    No leading or trailing blanks.            FM99.99 = .1
EEEE   Scientific notation.                     9.9EEEE = 1.2E+05
MI    Negative as a trailing minus.             999MI = 137-
PR    Negative in angle brackets (< >).         999PR = <137>
S     Negative as a leading minus.              S999 = -137
S:负数符号−放在开头,如:S999.9
RN    Uppercase Roman numeral.                  RN = XXIV
rn    Lowercase Roman numeral.                  rn = xxiv
X     Hexadecimal                               XX = FC





-------------------------------------------------------------

Oracle聚合函数RANK和dense_rank的使用
唯一区别就是如果排名重复rank则跳过,如 1,2,2,4
dense_rank则不跳过: 如1,2,2,3


TABLE:A (科目,分数)
  
  数学,80
  语文,70
  数学,90
  数学,60
  数学,100
  语文,88
  语文,65
  语文,77
  
  现在我想要的结果是:(即想要每门科目的前3名的分数)

数学,100
  数学,90
  数学,80
  语文,88
  语文,77
  语文,70
  
  那么语句就这么写:
  
  select * from (select rank() over(partition by 科目 order by 分数 desc) rk,a.* from a) t
  where t.rk<=3;


例子3:
  
  合计功能:计算出数值(4,1)在Orade By Col1,Col2排序下的排序值,也就是col1=4,col2=1在排序以后的位置
  
  SELECT RANK(4,3) WITHIN GROUP (ORDER BY col1,col2) "Rank" FROM table;
  
  结果如下:
  Rank
  4
  
  dense_rank与rank()用法相当,但是有一个区别:dence_rank在并列关系是,相关等级不会跳过。rank则跳过
  
  例如:表
A      B      C
  a     liu     wang
  a     jin     shu
  a     cai     kai
  b     yang     du
  b     lin     ying
  b     yao     cai
  b     yang     99
  
  例如:当rank时为:
  
  select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m
  
   A     B       C     LIU
   a     cai      kai     1
   a     jin      shu     2
   a     liu      wang     3
   b     lin      ying     1
   b     yang     du      2
   b     yang     99      2
   b     yao      cai     4
  
  而如果用dense_rank时为:
  
  select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m
  
   A     B       C     LIU
   a     cai     kai     1
   a     jin     shu     2
   a     liu     wang     3
   b     lin     ying     1
   b     yang     du      2
   b     yang     99      2
   b     yao     cai     3 




------------------------------------------------------------------
rollup----如果是ROLLUP(A, B, C)的话,则先group by (a,b,c)--->group by(a,b) -->group by (a)-->group by (全表)


cube---->如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。







分享到:
评论

相关推荐

    Oracle函数手册.zip

    - `RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`: 用于排序和生成行号。 7. **系统信息函数**: - `DBMS_METADATA.GET_DDL()`: 获取对象的DDL语句。 - `USERENV()`: 返回关于当前会话的信息,如用户名、数据库名等...

    ORCALE函数大全

    这些只是Oracle函数中的一小部分,实际上还有许多其他函数,如分析函数(如`RANK()`, `DENSE_RANK()`, `LEAD()`, `LAG()`等),系统信息函数,以及用户自定义函数等。学习并掌握这些函数,将有助于提高在Oracle...

    ORACLE资料

    - `RANK()`,`DENSE_RANK()`,`ROW_NUMBER()`:用于排序和分组中的行编号。 了解并熟练掌握这些Oracle函数,可以帮助开发者编写出更高效、更灵活的SQL查询,提升数据库管理效率。同时,结合源码和工具的使用,能更...

    oracle函数大全

    - `GROUP BY`和`ROLLUP`、`CUBE`、`GROUPING SETS`配合聚合函数实现分组汇总。 3. **分析函数**: - `RANK()`、`DENSE_RANK()`、`ROW_NUMBER()`用于排序和行编号。 - `LEAD()`、`LAG()`获取行的前后值,`FIRST_...

    oracle函数集合

    - `RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`:在分组后为每行分配唯一的序号。 7. **条件函数**: - `CASE WHEN condition THEN result [WHEN ...] ELSE default END`:根据条件返回不同的结果。 - `NVL...

    SQL和Oracle数据库函数说明

    2. **分组和分析函数**:`GROUP BY ROLLUP()`和`CUBE()`实现多级分组,`RANK()`、`DENSE_RANK()`和`ROW_NUMBER()`用于行排序和排名。 3. **系统信息函数**:如`SYSDATE`获取当前系统日期,`USER`返回当前用户。 4. *...

    关于oracle 函数的网上资料

    6. **分组和分析函数**:`GROUP BY`用于对数据进行分组,`ROLLUP`和`CUBE`生成多级汇总,`HAVING`过滤分组后的结果,`RANK()`, `DENSE_RANK()`和`ROW_NUMBER()`用于行号排序。 7. **系统信息函数**:如`USER`获取...

    oracle精华讲解

    - **分组和分析函数**:GROUP BY、ROLLUP、CUBE、RANK、DENSE_RANK、LEAD/LAG用于复杂的数据分组和窗口分析。 - **连接查询函数**:JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)、自连接和子查询帮助...

    ORACLE的内置函数

    4. `RANK() / DENSE_RANK() / ROW_NUMBER()`: 用于排序并分配行号,区别在于处理重复值的方式。 通过熟练掌握这些内置函数,开发者可以更高效地在Oracle数据库中执行复杂的查询和操作,提高工作效率。在实际应用中...

    sql 面试题总结一

    - 分区函数:如RANK(), DENSE_RANK(), ROW_NUMBER(),用于对分区内的行进行编号。 6. 视图和存储过程: - 视图:虚拟表,基于查询定义,可以简化复杂查询,保护数据隐私。 - 存储过程:预编译的SQL语句集合,可...

    Oracle事例

    20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); &lt;2&gt; 对第1个字段...

    DM7_SQL语言使用手册

    - **分析函数**:如RANK、DENSE_RANK等,用于排序和分组。 - **情况表达式**:CASE语句,根据条件返回不同结果。 **4.2 连接查询** - **交叉连接**:将两个表的所有行进行配对。 - **自然连接**:基于公共列进行...

Global site tag (gtag.js) - Google Analytics