oracle常用的函數(一) 之 to_char、to_date

文章目錄

  • 前言
  • to_char
    • 基本語法
    • 格式模型
      • 格式模型介紹
      • 無FM示例
      • 使用FM
      • 輸出貨幣
      • 負數輸出尖括號
    • 將日期格式化
    • 將數字格式化為帶有貨幣符號和千位分隔符的格式
    • 總結
  • to_date
    • 語法
    • 語法示例

戳這里,第二彈 → oracle常用的函數(二) 之 nvl、decode、length…

前言

工作中開始接觸了oracle,在使用的時候經常用到一些函數,再次做個總結,方便后續查看與使用

to_char

該函數主要用于將數據類型轉換為字符類型:
1、將數值、日期等類型轉換為字符串
2、根據指定的格式模型對結果進行格式化

基本語法

TO_CHAR(value, format_model, nls_params)
  • value:要轉換的值,可以是日期或數字
  • format_model:格式模型,用于指定轉換后的字符串格式
  • nls_params:(可選)用于指定語言環境參數,如日期語言、數字分組符號等

格式模型

格式模型介紹

在oracle的to_char函數中,常用的一個格式修飾符是FM。FM用于去除格式化后的字符串中的前導空格或尾隨零。結合數字格式模型,FM99999999999999999999999990.00的作用是將數字格式化為指定的格式

  • FM:Fill Model,表示“填充模式”,用于去除格式化后的字符串中的前導空格或尾隨零
  • 9:表示數字字符,如果該位置沒有數字,則顯示為空格
  • 0:表示數字字符,如果該位置沒有數字,則顯示為0
  • .:表示小數點
  • 00:表示小數部分,即使數字沒有小數部分,也會顯示兩位小數
  • L:貨幣符號
  • D:小數點
  • G:分組分隔符
  • PR:如果數字為負,則在字符串前后加上尖括號
  • RN:羅馬數字
  • TH:數字的序數(如1st,2nd,3rd等)

FM99999999999999999999999990.00 的作用是將數字格式化為最多 27 位整數和 2 位小數的格式,同時去除不必要的前導空格或尾隨零。這種格式化方式特別適用于需要精確控制數字顯示格式的場景,例如財務報表或數據導出。

無FM示例

  • 格式模式中的數字占位符(如9或0)的數量與實際數字的位數完全匹配

    select to_char(1234,'9999') as formatted_number from dual;
    

    輸出結果:1234(沒有空格)
    應為格式模型9999表示數字最多可以有4位,實際數字正好是4位,所以沒有空格

  • 實際數字的位數大于格式模式中的占位符

    select to_char(12345,'9999') as formatted_number from dual;
    

    輸出結果:12345(沒有空格)

  • 使用0作為占位符,不是9,此時不會出現空格,會用0填充

    select to_char(123,'0000') as formatted_number from dual;
    

    輸出結果:0123(前邊用0填充)

  • 格式模型中的數字占位符數量大于實際數字的位數,那么會在數字前填充空格,以保持格式模型的寬度一致

    select to_char(123,'99999') as formatted_number from dual;
    

    輸出結果: 123(前邊有兩個空格)
    格式模型99999表示數字最多可以有5位,實際數字123只有三位,所以前邊會填充三個空格

使用FM

  • 較小的數字,前導空格被去除
    select to_char(123,'FM9999999.00') as formatted_number from dual;
    

    輸出結果:123.00(沒有空格)
    使用 FM 修飾符后,前導空格會被去除

  • 負數
    SELECT TO_CHAR(-123456, 'FM99999999990.00') AS formatted_number FROM dual;
    

    輸出結果:-123456.00

輸出貨幣

 SELECT TO_CHAR(123456.78, 'L999,999.99') AS formatted_number FROM dual;

輸出結果:$123,456.78(具體貨幣符號取決于語言環境)

負數輸出尖括號

 SELECT TO_CHAR(-123456.78, '999,999.99PR') AS formatted_number FROM dual;

輸出結果:<123,456.78>

將日期格式化

當value是日期類型時,to_char函數可以將日期格式化為指定的字符串格式。

  • 常用日期格式

    YYYY:四位年份
    MM:兩位月份
    DD:兩位日期
    HH24:24小時制的小時
    MI:分鐘
    SS:秒
    AMPM:上午或下午
    DY:星期幾的縮寫(如 Mon、Tue 等)
    DAY:星期幾的全稱(如 Monday、Tuesday 等)
    MON:月份的縮寫(如 Jan、Feb 等)
    MONTH:月份的全稱(如 January、February 等)

  • 篩選特定日期格式的記錄

    # 將日期格式化為 YYYY-MM-DD 格式。
    select employee_id、name from employees 
    where to_char(hire_date,'YYYY-MM-DD')>'2023-06-23'
    

    1)將hire_date轉換為格式化的字符串
    2)篩選出晚于2023年6月23號入職的員工

  • 篩選特定星期幾的記錄

    # 將日期格式化為 YYYY-MM-DD 格式。
    select employee_id、name from employees 
    where to_char(hire_date,'DY','NLS_DATE_LANGUAGE=ENGLISH') <>'MON'
    

    1)將hire_date轉換為星期幾的縮寫
    2)NLS_DATE_LANGUAGE=ENGLISH確保星期幾的縮寫使用英文
    3)篩選出不是星期一的數據

  • 篩選特定日期范圍的記錄

    # 將日期格式化為 YYYY-MM-DD 格式。
    select employee_id、name from employees 
    where to_char(hire_date,'YYYY-MM-DD') not between '2023-01-01' and '2023-12-31'
    

    1)將hire_date轉換為格式化的字符串
    2)篩選出不在2023年入職的員工

將數字格式化為帶有貨幣符號和千位分隔符的格式

# 將數字格式化為帶有貨幣符號和千位分隔符的格式。
SELECT TO_CHAR(salary, 'L999,999.99') AS formatted_salary
FROM employees;

如果salary的值是123456.78
輸出結果: 123 , 456.78 貨幣符號 123,456.78 貨幣符號 123,456.78貨幣符號是根據數據庫的默認貨幣符號來顯示的

總結

  • 如果字段是時間格式,然后我們需要篩選

    select employee_id、name from employees 
    where to_char(hire_date,'YYYY-MM-DD')>'2023-06-23'
    
  • 如果需要顯示特定的貨幣符號

    • 查詢貨幣符號 并 設置指定的貨幣符號
      select * from NLS_DATEBASE_PARAMETERS WHERE PARAMETERS ='NLS_CURRENCY'
      
      ALTER SESSION SET NLS_CURRENCY='¥'
      

    • 查詢時直接設置貨幣符號,這樣無論數據庫默認貨幣符號是什么,都會顯示為¥
      select to_char(salary,'L999,999.99','NLS_CURRENCY = ¥') as formatted_salary
      from employees;
      
  • 格式模式使用,例如需要去除前后空格并不需要小數部分

    SELECT TO_CHAR(123456.78, 'FM99999999') AS formatted_number FROM dual;
    
  • 性能

    對于大數據量的表,使用to_char函數可能會對性能產生一定的影響

    • 1、to_char函數需要再查詢執行過程中動態計算并轉換數據類型,從而會增加cpu的消耗和內存的占用
    • 2、在where子句中使用to_char函數對導致數據庫無法使用索引,因為格式化后的值與索引中的原始值不匹配

to_date

TO_DATE 函數用于將字符串轉換為日期類型,并可以指定格式

語法

TO_DATE(string, format)

語法示例

將字符串 ‘2024-06-12’ 轉換為日期類型

SELECT TO_DATE('2024-06-12', 'YYYY-MM-DD') AS hire_date
FROM dual;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912655.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫服務器宕機的處理方法與實戰策略

在當今數字化時代,數據庫作為企業數據存儲與管理的核心,承載著業務運行的關鍵信息。一旦數據庫服務器宕機,將導致業務中斷、數據丟失等嚴重后果,甚至可能給企業帶來巨大的經濟損失和聲譽損害。因此,掌握一套系統、科學的數據庫服務器宕機處理方法尤為重要。本文將從應急響…

如何hack邊緣的kubelet修改Cgroup數值

之前做了一個VPA項目的需求&#xff0c;就是需要不重啟的方式修改容器的Cgroup的值已達到垂直擴縮容的目的&#xff0c;項目中核心的思路如下 上游下發要VPA的結果的值寫入到容器的Annotation里面Kubelet 感知到這個 annoation 的變化我們本地運行一個 Agent&#xff0c;里面運…

熟悉 PyCharm

界面 我們常用的就這個幾個地方&#xff1a; 常用配置 調整字體大小 Ctrl 滾輪調整字體大小 插件推薦 Indent Rainbow 該插件的作用在于能夠對于不同層級縮進的空格標注不同的顏色&#xff1a; 快捷鍵 快捷鍵的 pdf 下載鏈接&#xff1a; Windows 版&#xff1a;https:…

pytorch--模型訓練的一般流程

文章目錄 前言0、數據集準備1、數據集2、dataset3、model4、訓練模型 前言 在pytorch中模型訓練一般分為以下幾個步驟&#xff1a; 0、數據集準備 1、數據集讀取&#xff08;dataset模塊&#xff09; 2、數據集轉換為tensor&#xff08;dataloader模塊&#xff09; 3、定義模型…

智能合同管理實戰:基于區塊鏈的電子簽約技術實現

在數字經濟時代,傳統紙質合同簽署方式已難以滿足企業高效、安全、合規的業務需求。智能合同管理(Smart Contract Management)結合區塊鏈技術,正在重塑電子簽約流程,實現合同全生命周期的自動化、可追溯和防篡改。本文將深入探討基于區塊鏈的電子簽約技術實現,涵蓋核心架構…

設計模式精講 Day 22:模板方法模式(Template Method Pattern)

【設計模式精講 Day 22】模板方法模式&#xff08;Template Method Pattern&#xff09; 文章標簽 設計模式, 模板方法模式, Java開發, 面向對象設計, 軟件架構, 設計模式實戰, Java應用開發 文章簡述 模板方法模式是一種行為型設計模式&#xff0c;它通過定義一個算法的骨架…

如何在pytorch中使用tqdm:優雅實現訓練進度監控

文章目錄 為什么需要進度條&#xff1f;tqdm 簡介基礎用法示例深度學習中的實戰應用1. 數據加載進度監控2. 訓練循環增強版3. 驗證階段集成 高級技巧與最佳實踐1. 自定義進度條樣式2. 嵌套進度條&#xff08;多任務&#xff09;3. 分布式訓練支持4. 與日志系統集成 性能優化建議…

Linux中的xxd命令詳解

xxd 是一個 十六進制轉儲&#xff08;hex dump&#xff09;工具&#xff0c;通常用于將二進制文件轉換為十六進制格式&#xff0c;或者反向轉換&#xff08;十六進制→二進制&#xff09;。它是 vim 的一部分&#xff0c;但在大多數 Linux 系統&#xff08;如 Ubuntu&#xff0…

磐維數據庫panweidb3.1.0單節點多實例安裝

0 說明 業務科室提單需要在某臺主機上部署多個單機磐維數據庫&#xff0c;用于業務測試。以下內容展示如何在單節點安裝多個磐維數據庫實例。 1 部署環境準備 1.1 IP 地址及端口 instipport實例1192.168.131.1717700實例2192.168.131.1727700 在131.17上分別安裝兩個實例&…

轉錄組分析流程(三):功能富集分析

我們的教程主要是以一個具體的例子作為線索,通過對公共數據庫數據bulk-RNA-seq的挖掘,利用生物信息學分析來探索目標基因集作為某種疾病數據預后基因的潛能及其潛在分子機制,同時在單細胞水平分析(對scRNA-seq進行挖掘)預后基因的表達,了解細胞之間的通訊網絡,以期為該疾病…

全面掌握 tkinter:Python GUI 編程的入門與實戰指南

在自動化、工具開發、數據可視化等領域&#xff0c;圖形用戶界面&#xff08;GUI&#xff09;往往是提升用戶體驗的重要方式。作為 Python 官方內置的 GUI 庫&#xff0c;tkinter 以其輕量、跨平臺、易于學習的特性成為初學者和輕量級應用開發者首選。 本文將以深入淺出的方式…

TDH社區開發版安裝教程

&#xff08;注&#xff1a;本文章來源于星環官網安裝手冊&#xff09; 后面放置了視頻和安裝手冊連接 1、硬件及環境要求 Docker17及以上版本&#xff0c;支持Centos&#xff0c;Ubuntu等系統&#xff08;注&#xff1a;這里我使用CentOS-7版本&#xff0c;最佳版本推薦為7.…

Linux基本命令篇 —— grep命令

grep是Linux/Unix系統中一個非常強大的文本搜索工具&#xff0c;它的名字來源于"Global Regular Expression Print"&#xff08;全局正則表達式打印&#xff09;。grep命令用于在文件中搜索包含特定模式的行&#xff0c;并將匹配的行打印出來。 目錄 一、基本語法 二…

蒼穹外賣問題系列之 蒼穹外賣訂單詳情前端界面和網課給的不一樣

問題 如圖&#xff0c;我的前端界面和網課里面給的不一樣&#xff0c;沒有“申請退款”和一些其他的該有的東西。 原因分析 “合計”這一欄顯示undefined說明我們的總金額沒有輸入進去。可以看看訂單提交那塊的代碼&#xff0c;是否可以正確輸出。還有就是訂單詳細界面展示這…

CppCon 2018 學習:EMULATING THE NINTENDO 3DS

我們來逐個分析一下這個 組件交互模型 和 仿真 & 序列化 的關系&#xff0c;特別是主線程&#xff08;Main Thread&#xff09;與其他系統組件之間的交互。 1. Main Thread — simple (basically memcpy) --> GPU Main Thread&#xff08;主線程&#xff09;負責游戲的…

[Python 基礎課程]數字

數字 數字數據類型用于存儲數值&#xff0c;比如整數、小數等。數據類型是不允許改變的&#xff0c;這就意味著如果改變數字數據類型的值&#xff0c;將重新分配內存空間。 創建數字類型的變量&#xff1a; var1 1 var2 10創建完變量后&#xff0c;如果想廢棄掉這個變量&a…

Linux CentOS環境下Java連接MySQL數據庫指南

文章目錄 前言一、環境準備1.1 系統更新1.2 Java環境安裝1.3 MySQL數據庫安裝1.4 下載JDBC驅動 二、編寫Java程序2.1 代碼如下2.2 編譯和運行2.3 驗證創建結果 三、代碼上傳至Gitee3.1 安裝配置Git3.2 克隆倉庫到本地3.3 添加Java項目文件3.4 提交代碼到本地倉庫3.5 推送到Gite…

LLM面試12

訊飛算法工程師面試題 SVM核函數能否映射到無窮維 可以的&#xff0c;多項式核函數將低維數據映射到高維&#xff08;維度是有限的&#xff09;&#xff0c;而高斯核函數可以映射到無窮維。由 描述下xgb原理&#xff0c;損失函數 首先需要說一說GBDT,它是一種基于boosting增強…

類加載生命周期與內存區域詳解

類加載生命周期與內存區域詳解 Java 類加載的生命周期包括加載、驗證、準備、解析、初始化五個階段&#xff0c;每個階段在內存中的存儲區域和賦值機制各有不同。以下是詳細解析&#xff1a; 一、類加載生命周期階段 1. 加載&#xff08;Loading&#xff09; 內存區域&…

正交視圖三維重建2 筆記 2d線到3d線2 先生成3d線然后判斷3d線在不在

應該先連線再判斷線在不在 if(fx1tx1&&tx1tx2){ const A[fx1, fy1, ty1];const Ahat[fx1, fy1, ty2];drawlines(A[0], A[1], A[2], Ahat[0], Ahat[1], Ahat[2], lineId, type,2);}if(fx2tx1&&tx1tx2){ const B[fx2, fy2, ty1];const Bhat[fx2, fy2, ty2];drawl…