2025年7月21日 星期一

使用FRAME子句的視窗函數

--完全不需要 JOIN 或自訂 ROW_NUMBER!
--ROWS BETWEEN, 代替 ROW_NUMBER()
 SELECT *,

  AVG([C]) OVER (

    PARTITION BY [履約價], [買賣權], [到期月份(週別)]

    ORDER BY TRY_CAST([交易日期] AS DATE)

    ROWS BETWEEN 4 PRECEDING AND CURRENT ROW

  ) AS MA_5

FROM dbo.TXO_OHLC


2025年5月6日 星期二

大量匯入CSV

--大量匯入CSV
 BULK INSERT dbo.TXO_RAW

  FROM 'D:\Users\Documents\TXO\20250319-20250415.csv'

  WITH (

  --CODEPAGE = 65001,

  FIRSTROW = 2,

  FIELDTERMINATOR = ',',

  ROWTERMINATOR = '\n'

)

2024年9月25日 星期三

SQL LIKE 語法(萬用字元)

 SQL LIKE 語法(萬用字元):

1. % 任何字串。

        範例: LIKE '%PC%' 找出包含PC的字串

2. _ (底線) 任一字元。

        範例: LIKE '_ank', 限四個字元+結尾為ank的字串, ex:Tank

3. [ ] 指定範圍或任一字元。

        範例:LIKE '[A-Z]' 單一英文字母, 

        範例:LIKE '[AKZ]' 只找AKZ這3字元,

        範例:LIKE '%[_]%' 找出包含底線的字串, 範例:LIKE '%[%]%' 找出包含%的字串,

        範例:LIKE '%[[]%' 找出包含左-中括弧的字串, 範例:LIKE '%[]]%' 找出包含右-中括弧的字串,

4. [^] 不在指定範圍或任一字元。

        範例:LIKE '[^B-Y]' 單一英文字母, 不在B~Y之間,

        範例:LIKE '[^AKZ]' 單一英文字母, 不包含AKZ這3字元

2024年6月26日 星期三

無法壓縮資料庫mdf

 無法壓縮資料庫mdf:

 無法壓縮資料庫識別碼 13 的檔案識別碼 1,因為它正由另一個處理序壓縮中或是空的.


sol: 改變資料庫大小,

USE [master]

GO

ALTER DATABASE [DB1] MODIFY FILE ( NAME = N'DBF1', SIZE = 1024KB )

GO


2024年5月21日 星期二

PIVOT TABLE

 SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5

FROM (SELECT PurchaseOrderID, EmployeeID, VendorID FROM Purchasing.PurchaseOrderHeader) p PIVOT ( COUNT (PurchaseOrderID) FOR EmployeeID IN ( [250], [251], [256], [257], [260] ) ) AS pvt ORDER BY pvt.VendorID;

2024年4月18日 星期四

一次新增多筆資料 (INSERT INTO)

 一次新增多筆資料 (INSERT INTO)

語法:


INSERT INTO table_name

VALUES (value1_1, value2_2, value3_3,···),

(value2_1, value2_2, value2_3,···),

(value3_1, value3_2, value3_3,···);


2024年1月18日 星期四

新分頁語法 OFFSET + FETCH

SQL 新的分頁語法  OFFSET 和 FETCH,效能比先前的 ROW_NUMBER() 函數速度快上許多。
ex:

SELECT *

FROM

(

SELECT ID, ROW_NUMBER() OVER (ORDER BY ID)  AS RowID

FROM Table_2

) A

WHERE RowID BETWEEN 3*10 AND (3+1)*10-1

;

SELECT *

FROM

(

SELECT ID, ROW_NUMBER() OVER (ORDER BY ID)  AS RowID

FROM Table_2

) A

ORDER BY RowID

OFFSET 3*10-1 Rows 

FETCH NEXT 10 Rows ONLY

;