sql中的一些函數(長期更新。。)


前言

在最近看別人的sql的時候,看到一些函數,比如left(),right()等等,好奇是什么意思,查詢之后覺得還是挺有用的,特此記錄下來。博客會在遇到新的函數的時候定期更新。

正文

1. left()和right()

在一個sql中遇見了left(character,integer)函數,覺得好奇,百度了之后發現意義是:返回left(character,integer)中character從左起第一個到第integer個字符。如果integer是負的,那么返回空的字符串。

right()同理。

舉個例子:left("abcdefg",3)得到的結果是:abc,因為要拿abcdefg的前三個字符,也就是abc。

需要注意的是:oracle中是沒有這兩個函數的,oracle中對應的是substr(字符串,截取開始位置,截取結束位置)。

2. ISNULL(A,B)

關於ISNULL(A,B),其意義是:如果A為null的時候,則返回B的值,如果不為null,則返回A的值。常見應用為聚合求和的時候。

舉個例子:

ISNULL(SUM(num),0):如果對num列求和結果為null(也就是數據庫這列數據都沒有值),那么就返回0。

3. NOW()函數:<<Mysql可用>>
NOW()函數,可以用來獲取當前時間的函數。目前測試了mysql和sqlserver,只可以在mysql中使用。

--Mysql數據庫

SqlServer數據庫,無法識別的內置函數

4. day(),month(),year()時間函數
  • day()函數:獲取查詢結果的日期值
  • month()函數:獲取查詢結果的月份值
  • year()函數:獲取查詢結果的年份值

正常的年份的查詢,8位的數據格式。

6位的時間格式,如果年份的后兩位<= 12,那么系統會默認將后兩位作為月份和日期來處理,前兩位默認為20+“日期的前兩位”,所以得到的是2020年12月01日的時間,需要特別注意!

如果你的年份后兩位>12,那么會直接報錯!因為不能轉換成大於12月的數據。所以一般還是建議時間格式位8位!

所以:如果時間格式確定都是6位,那么建議使用的是left()函數,而非year()函數。

5. dateAdd()和date_add()函數

sqlServer中,幾天后的時間使用的是dateAdd()函數,DATE_ADD() 函數向日期添加指定的時間間隔。

DATE_ADD(date,INTERVAL expr type)
date 參數是合法的日期表達式。
expr 參數是您希望添加的時間間隔。
type 參數可以是下列值:見w3cschool鏈接

在mysql中,使用的則是:date_add()函數,DATEADD() 函數在日期中添加或減去指定的時間間隔。

DATEADD(datepart,number,date):
date 參數是合法的日期表達式。
number 是您希望添加的間隔數;對於未來的時間,此數是正數,對於過去的時間,此數是負數。
datepart 參數可以是下列的值:見w3cschool鏈接

用法如下:

sqlServer中的方法

mysql中的方法

特別注意的是:更過的date的時間函數,請參考w3cschool:W3Cschool數據庫時間函數鏈接,其中有mysql和sqlServer的時間函數。

6. UNION和UNION ALL

在寫sql的時候,有些數據的存儲可能涉及到分庫分表,查詢的時候,可能需要查詢所有的分表,這個時候,就需要用到UNION或者UNION AL。

union操作符:用於合並兩個或多個SELECT語句的結果集,這里需要注意的是:UNION內部的SELECT語句必須擁有相同數量的

列,列也必須擁有相似的數據類型,同時,每條SELECT語句中列的順序必須相同。

SELECT name FROM user UNION  SELECT name FROM user1 //得到的結果就是:分別從user表和user1表中查詢name字段,然后合並到一起。

需要特別注意的是:union操作符合並的結果集,不允許重復,如果不要去重的話,需要使用union all。

案例sql:(參考:https://blog.csdn.net/zouxucong/article/details/73468979)使用foreach循環,並用union all連接,簡化操作,查詢多表並將結果集進行合並。分庫分表必會技能!

<select id="getFourteenHotPost" parameterType="map" resultMap="productCommentsInfoAndroid">  
        select t.comments_id,t.product_id,t.comment,t.order_path from (  
        <foreach collection="tableNames" item="item" separator="UNION ALL">  
            (SELECT c.comments_id,c.product_id,c.comment,i.order_path,c.p_index,c.t_index,c.title,c.time   
            FROM ${item} as c left join `gshop_comments_img` as i on c.comments_id = i.comments_id    
            where c.object_type=2 and c.display=1 and c.is_show=1   
            and c.t_index=1   
            GROUP BY c.product_id ORDER BY c.p_index asc,c.t_index desc,c.title desc,c.time desc limit 14)    
        </foreach>) t  
        GROUP BY t.product_id ORDER BY t.p_index asc,t.t_index desc,t.title desc,t.time desc limit 14  
    </select>  

后記

這里僅僅記錄了目前遇見的一些函數,如果以后遇到了還會繼續更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM