sql語氣查詢去重的兩種方法、sql的模糊查詢、sql中的日期函數、mysql字元串截取之substring_index、sql中字元串的切割、截取、刪除、替換、計算字元串長度函數、返回某個日期之間的解法

来源:https://www.cnblogs.com/suncolor/archive/2023/02/14/17114194.html
-Advertisement-
Play Games

sql語氣查詢去重的兩種方法 以下兩種都可以進行去重查詢,區別是: 用distinct去重,只能查詢到去重的屬性那一列,無法查詢其他欄位 用group by分組查詢,可以根據需求查詢對應的其他欄位,推薦用group by 第一種:使用distinct(關鍵詞distinct用於返回唯一不同的值) s ...


sql語氣查詢去重的兩種方法

以下兩種都可以進行去重查詢,區別是: 用distinct去重,只能查詢到去重的屬性那一列,無法查詢其他欄位 用group by分組查詢,可以根據需求查詢對應的其他欄位,推薦用group by

第一種:使用distinct(關鍵詞distinct用於返回唯一不同的值)
select distinct university from user_profile;

第二種:使用group by按照university進行分組
select university from user_profile group by university;

sql的模糊查詢

這道題主要考察的是模糊查詢 欄位名 like '匹配內容'

_ :下劃線 代表匹配任意一個字元;

% :百分號 代表匹配0個或多個字元;

[]: 中括弧 代表匹配[ ]中的任意一個字元(若要比較的字元是連續的,則可以用連字元“-”表 達 );

[^]: ^尖冒號 代表 非,取反的意思;不匹配[ ]中的任意一個字元。。

tips:面試常問的一個問題:你瞭解哪些資料庫優化技術? SQL語句優化也屬於資料庫優化一部分,而我們的like模糊查詢會引起全表掃描,速度比較慢,應該儘量避免使用like關鍵字進行模糊查詢。

sql中的日期函數

知識
日期函數
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應於ODBC標準。

1
select DAYOFWEEK('1998-02-03')
-> 3

WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

1
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5

DAYOFMONTH(date)
返回date的月份中日期,在1到31範圍內。

1
mysql> select DAYOFMONTH('1998-02-03');
-> 3

DAYOFYEAR(date)
返回date在一年中的日數, 在1到366範圍內。

1
mysql> select DAYOFYEAR('1998-02-03');
-> 34

MONTH(date)
返回date的月份,範圍1到12。

1
mysql> select MONTH('1998-02-03');
-> 2

DAYNAME(date)
返回date的星期名字。

1
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'

MONTHNAME(date)
返回date的月份名字。

1
mysql> select MONTHNAME("1998-02-05");
-> 'February'

QUARTER(date)
返回date一年中的季度,範圍1到4。

1
mysql> select QUARTER('98-04-01');
-> 2

WEEK(date)
對於星期天是一周的第一天的地方,有一個單個參數,返回date的周數,範圍在0到52。

1
mysql> select WEEK('1998-02-20');
-> 7

WEEK(date,first)
2個參數形式WEEK()允許你指定星期是否開始於星期天或星期一。
如果第二個參數是0,星期從星期天開始,
如果第二個參數是1,從星期一開始。

1
mysql> select WEEK('1998-02-20',0);
-> 7

1
mysql> select WEEK('1998-02-20',1);
-> 8

YEAR(date)
返回date的年份,範圍在1000到9999。

1
mysql> select YEAR('98-02-03');
-> 1998

HOUR(time)
返回time的小時,範圍是0到23。

1
mysql> select HOUR('10:05:03');
-> 10

MINUTE(time)
返回time的分鐘,範圍是0到59。

1
mysql> select MINUTE('98-02-03 10:05:03');
-> 5

SECOND(time)
回來time的秒數,範圍是0到59。

1
mysql> select SECOND('10:05:03');
-> 3

PERIOD_ADD(P,N)
增加N個月到階段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。註意階段參數P不是日期值。

1
mysql> select PERIOD_ADD(9801,2);
-> 199803

PERIOD_DIFF(P1,P2)
返回在時期P1和P2之間月數,P1和P2應該以格式YYMM或YYYYMM。註意,時期參數P1和P2不是日期值。

1
mysql> select PERIOD_DIFF(9802,199703);
-> 11

mysql字元串截取之substring_index

substring_index()函數用來截取字元串

    substring_index(str,delim,count)
    str:要處理的字元串
    delim:分隔符
    count:計數

示例:

如 str=www.wiki.com

則 substring_index(str,'.',1) 處理的結果是:www

substring_index(str,'.',2) 得到的結果是:www.wiki

也就是說,如果count是正數,那麼就是從左往右數,第N個分隔符的左邊的全部內容,

相反,如果是負數,那麼就是從右邊開始數,第N個分隔符右邊的所有內容。

如:

substring_index(str,'.',-2) 得到的結果為:http://wikibt.com

如果要中間的的 wiki 怎麼辦?

很簡單的,需要從兩個方向截取:

先截取從右數第二個分隔符的右邊的全部內容,再截取從左數的第一個分隔符的左邊的全部內容:

  substring_index(substring_index(str,'.',-2),'.',1);

sql中字元串的切割、截取、刪除、替換、計算字元串的長度函數

select
-- 替換法 replace(string, '被替換部分','替換後的結果')
-- device_id, replace(blog_url,'http:/url/','') as user_name
 
-- 截取法 substr(string, start_point, length*可選參數*)
-- device_id, substr(blog_url,11,length(blog_url)-10) as user_nam
 
-- 刪除法 trim('被刪除欄位' from 列名)
-- device_id, trim('http:/url/' from blog_url) as user_name
 
-- 欄位切割法 substring_index(string, '切割標誌', 位置數(負號:從後面開始))
device_id, substring_index(blog_url,'/',-1) as user_name
 
from user_submit;

字元串的截取:substring(字元串,起始位置,截取字元數)
字元串的拼接:concat(字元串1,字元串2,字元串3,...)
字母大寫:upper(字元串)

計算字元串長度函數

char_length(字元串列名)

sql的高級語法:視窗函數

見鏈接:https://zhuanlan.zhihu.com/p/92654574

補充視窗函數:
image

lead的寫法:(偏移標的,偏移量,null)

ifnull(A,B):A非空返回A,A是空值返回B

返回 2020 年 1 月的所有訂單的訂單號和訂單日期的解法

字元串匹配(近似查找法)

用like來查找

select order_num, order_date
from Orders
where order_date like '2020-01%'
order by order_date

切割字元串

select order_num, order_date
from Orders
where left(order_date, 7) = '2020-01'
order by order_date

字元串比較

select *
from Orders
where order_date >= '2020-01-01 00:00:00' and order_date <= '2020-01-31 23:59:59'
order by order_date;

用正則來查找(效率不如like,能用like就用like)

select order_num, order_date
from Orders
where order_date regexp '2020-01'
order by order_date

時間函數匹配

select order_num, order_date
from Orders
where year(order_date) = '2020' and month(order_date) = '1'
order by order_date

利用date_format函數 (參考其中的匹配規則進行匹配)

select order_num, order_date
from Orders
where date_format(order_date, '%Y-%m')='2020-01'
order by order_date

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設計原則系列文章 必知必會的設計原則——介面隔離原則 必知必會的設計原則——單一職責原則 必知必會的設計原則——開放封閉原則 必知必會的設計原則——依賴倒置原則 必知必會的設計原則——里氏替換原則 概述 迪米特法則(Law of Demeter )又叫做最少知識原則,即一個對象應該對另一個對象有最少 ...
  • STM32 SPI硬體NSS STM32F1的SPI NSS引腳並不是通常認為的,打開硬體NSS後在發送數據的時候NSS輸出低,去片選從設備,在發送完成後釋放從設備,硬體NSS而是用來實現多主機模式的。 當時我還以為買到了假STM32了呢。 在我們配置SPI為硬體NSS之後,配置代碼如下,發現不論發 ...
  • 前言 ​ 開發時習慣將所有項目將在統一文件夾下,運行目錄在其它目錄;如果每次修改後又copy到運行目錄就很蛋疼,於是找到了同步本地文件夾這個解決方法。監聽工作目錄的文件修改,同步到運行目錄。 思路 用inotify監控文件夾,如果文件夾內有文件變化則輸出變化情況 每當inotify檢測到文件變化時, ...
  • Hyper-V添加內部NAT網路 使用powershell (管理員許可權)執行 1、創建虛擬交換機,等同於在Hyper-V管理器界面中新建虛擬網路交換機 <# 說明: New-VMSwitch 是創建虛擬交換機的指令 -SwitchName 是指定創建交換機的名字 "NAT-VM" 是交換機的名字 ...
  • 前段時間在測試一個連麥 demo,demo 簡要說可以在內網環境中運行時,輸入頻道號就可以模擬連麥 但是在加入連麥時,一直返回錯誤 -2 EOF,詢問得知,該錯誤的解釋信息是“Service Unavailable”,詢問伺服器的同學得知,他們那邊的伺服器並沒有收到連麥請求 使用 wireshark ...
  • 自己編譯的內核進行修改後為後續方便查詢是那個版本的系統。 所以每次更改內核後都需要修改一下版本信息, 又因為內核一般是不變的為了區分所以增加到擴展版本上。 操作環境: 硬體是全志 V3S Linux內核是3.4 修改的方法: 方法一: 一個在menuconfig中進行增加 打開menuconfig ...
  • Vim 簡介{#vim-簡介} Vim 是 Linux 系統上的最著名的文本/ 代碼編輯器,也是早年的 Vi編輯器的加強版,而 gVim 則是其 Windows 版。它的最大特色是完全使用鍵盤命令進行編輯,脫離了滑鼠操作雖然使得入門變得困難,但上手之後鍵盤流的各種巧妙組合操作卻能帶來極為大幅的效率提 ...
  • 原文地址: https://blog.fanscore.cn/a/51/ 背景 最近接到一個需求,開發中使用了redis georadius命令取附近給定距離內的點。完工後對服務進行壓測後發現georadius的性能比預期要差,因此我分析了georadius的源碼,並對原始的實現方案進行了優化,總結 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...