顯示具有 t-sql 標籤的文章。 顯示所有文章
顯示具有 t-sql 標籤的文章。 顯示所有文章

2022年11月28日 星期一

T-SQL 字串日期有 "上午","下午" 的格式轉換成標轉日期格式

 WITH QQ AS (

    SELECT '2020/11/27 上午 11:58:44' AA

    UNION ALL

    SELECT '2020/11/27 下午 11:58:44' AA)

    SELECT AA 轉換前

    ,CONVERT(DATETIME,CASE WHEN CHARINDEX('上午',AA)>0 THEN REPLACE(AA, ' 上午','')+' AM'   WHEN CHARINDEX('下午',AA)>0 THEN REPLACE(AA, ' 下午','')+' PM'  END,120)   轉換為日期

    FROM QQ 

    轉換前 轉換日期

2020/11/27 上午 11:58:44 2020/11/27 11:58:44.0000  

2020/11/27 下午 11:58:44 2020/11/27 23:58:44.0000  

2021年12月29日 星期三

T-SQL 取第一天與最後一天

   

SELECT 

DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE())-6,0) N年第一天

,DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) 年第一天

,DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0) 季第一天

,DATEADD(M, DATEDIFF(M,0,GETDATE())-10,0) 年第2個月第一天

,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 月第一天

,DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0) 周第一天

,DATEADD(MILLISECOND, -2, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) 月最後一天2359

,EOMONTH ( GETDATE(),0 ) 月最後一天

2020年8月26日 星期三

Oracle 將資料列合併成一筆(xml_agg 同)

 方法一 SYS_CONNECT_BY_PATH

WITH QA AS

     (SELECT 'Row1' DROW, 'user1' EMP, 100 NUM  FROM DUAL

      UNION ALL

      SELECT 'Row2' DROW, 'user1' EMP, 90 NUM   FROM DUAL

       UNION ALL

      SELECT 'Row3' DROW, 'user1' EMP, 90 NUM   FROM DUAL

      UNION ALL

      SELECT 'Row4' DROW, 'user1' EMP, 80 NUM   FROM DUAL),

      QB AS (SELECT  EMP,NUM, COUNT(*) OVER (PARTITION BY  EMP  ) CNT,  ROW_NUMBER() OVER (PARTITION BY EMP  ORDER BY NUM)  SEQ    FROM QA )

           SELECT  EMP, SUBSTR(SYS_CONNECT_BY_PATH( NUM, ','), 2) COMBINE FROM QB

WHERE SEQ = CNT START WITH SEQ = 1 CONNECT BY PRIOR SEQ + 1 = SEQ AND PRIOR  EMP=EMP;     

方法二 Listagg

WITH QA AS 

     (SELECT 'Row1' DROW, 'user1' EMP, 100 NUM  FROM DUAL 

      UNION ALL 

      SELECT 'Row2' DROW, 'user1' EMP, 90 NUM   FROM DUAL 

       UNION ALL 

      SELECT 'Row3' DROW, 'user1' EMP, 90 NUM   FROM DUAL 

      UNION ALL 

      SELECT 'Row4' DROW, 'user1' EMP, 80 NUM   FROM DUAL) 

 SELECT  EMP,  LISTAGG(NUM, ',') WITHIN GROUP (ORDER BY NUM) AS  COMBINE FROM QA  group by EMP

2014年6月16日 星期一

MS-SQL 欄位值 大小寫識別 T-SQL

最近發現 MS-SQL 字串欄位,大寫 和 小寫 會視為相同的值,資料比對誤判
只要在欄位名稱後 加上 Collate SQL_Latin1_General_CP1_CS_AS 大小就視為不同,
相反 SQL_Latin1_General_CP1_CI_AS 就視為相同

如下案例:
select
case when  'ABC' = 'abc'   then 'Yes' else 'NO' End  NO_CS_AS ,
case when  'ABC' Collate SQL_Latin1_General_CP1_CS_AS
         = 'abc' then 'Yes' else 'NO' End   CS_AS,
case when  'ABC' Collate SQL_Latin1_General_CP1_CI_AS
         = 'abc' then 'Yes' else 'NO' End   CI_AS

select
case when 'Abc'  = 'ABC'   then '字串模糊比對' else 'Abc <> ABC' end AS "資料庫預設",
case when 'Abc' Collate SQL_Latin1_General_CP1_CS_AS = 'ABC' Collate SQL_Latin1_General_CP1_CS_AS  then '字串大小寫比對' else 'Abc <> ABC' end AS "指定大小寫比對",
case when 'Abc' Collate SQL_Latin1_General_CP1_CI_AS = 'ABC' Collate SQL_Latin1_General_CP1_CI_AS  then '字串模糊比對' else 'Abc <> ABC' end as "指定模糊比對"

參考 http://technet.microsoft.com/zh-tw/library/ms180175(v=SQL.105).aspx