2021年10月4日 星期一

[SQL]字串切割連接處理 與 名字馬賽克範例

DECLARE @tNameTable TABLE(name VARCHAR(10))

--insert data

INSERT INTO @tNameTable

VALUES('唐三')

INSERT INTO @tNameTable

VALUES('唐三藏')

INSERT INTO @tNameTable

VALUES('唐朝盛世')

SELECT * FROM @tNameTable

-- start to mark

SELECT CASE LEN(name)

WHEN 0 | 1

THEN ''

WHEN 2 THEN CONCAT(LEFT(name, 1),'O')

ELSE

CONCAT(LEFT(name,1),SUBSTRING('OOOOOOOOOO',1,LEN(name)-2),RIGHT(name,1))

END

FROM @tNameTable 


結果!!!
預設的資料是 唐三,唐三藏,唐朝盛世

經過馬賽克字串處理會變成 唐O,唐O藏,唐OO世





2021年9月12日 星期日

[SQL]字串切割

 

DECLARE @str varchar(10) = ''

DECLARE @buff varchar(10) = 'hello'


SELECT @str = substring(@buff,1,4) 


select @str,@buff



---------------------------

substring   返回字元、binary、text 或 image 表示式的一部分。
       基本語法: SUBSTRING  (  expression  ,   start  ,   length  ) 
       expression :字串、二進位制字串、text、image、列或包含列的表示式
       start :整數,指定子串的開始位置       注:SQL中"1"表示字串中的第一個字元,而.NET中"0"表示第一個字元
       length :整數,指定子串的長度(要返回的字元數或位元組數)

2021年9月10日 星期五

[SQL]group by 分組取得資料

 SELECT "欄位1", SUM("欄位2")

FROM "表格名"
GROUP BY "欄位1";

在我們的範例上,

Store_Information 表格

Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999

我們鍵入,

SELECT Store_Name, SUM(Sales)
FROM Store_Information
GROUP BY Store_Name;

結果:

Store_NameSUM(Sales)
Los Angeles1800
San Diego250
Boston700

當我們選不只一個欄位,且其中至少一個欄位有包含函數的運用時,我們就需要用到 GROUP BY 這個指令。在這個情況下,我們需要確定我們有 GROUP BY 所有其他的欄位。換句話說,除了有包括函數的欄位外,我 們都需要將其放在 GROUP BY 的子句中。

2021年9月9日 星期四

[SQL]重新命名 Table Name 與 Column Name

 

-- 修改 Table 欄位名稱,自行修改前 2 個 '' 中的資料,最後的 'COLUMN' 保留不變

EXEC sp_rename 'Table_Name.Old_Column_Name', 'New_Column_Name', 'COLUMN'


-- 修改 Table 名稱

EXEC sp_rename 'Old_Table_Name' , 'New_Table_Name'

2021年8月18日 星期三

[C++]Char to TCHAR

Char 轉成 TCHAR的辦法

// ANSI(char) to Unicode(TCHAR)

char* temp = "測試";

int nIndex = MultiByteToWideChar(CP_ACP, 0, temp , -1, NULL, 0);

TCHAR *pUnicode = new TCHAR[nIndex + 1];

MultiByteToWideChar(CP_ACP, 0, temp , -1, pUnicode, nIndex);



// Unicode(WCHAR) to ANSI(char)

TCHAR *pUnicode = _T("你好");

int nIndex = WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, NULL, 0, NULL, NULL);

char *temp = new char[nIndex + 1];

WideCharToMultiByte(CP_ACP, 0, pUnicode, -1, temp , nIndex, NULL, NULL);

2021年8月3日 星期二

[SQL]CURSOR 光標用法

說明:  

 CURSOR 為暫存資料,一次只針對一個資料集直接對資料庫進行操作搬移或其他操作


注意 FETCH取得全域變數狀態(@@FETCH_STATUS)

0:FETCH成功

-1:FETCH失敗

-2:資料不存在


--T2 table have 2 column(id,status)

DECLARE cur_Buf CURSOR

FOR

SELECT * FROM [dbo].T2

DECLARE @iBuf_Id INT = 0;

DECLARE @iBuf_Status INT = 0;

DECLARE @iShow_Id INT = 0;

DECLARE @iShow_Status INT = 0;

DECLARE @iShow_Count INT = 0;

 

PRINT '----START---'

OPEN cur_Buf

FETCH NEXT FROM cur_Buf into @iBuf_Id,@iBuf_Status

WHILE(@@FETCH_STATUS = 0) BEGIN

   SET @iShow_Id = @iBuf_Id

   SET @iShow_Status = @iBuf_Status

   SET @iShow_Count = @iShow_Count +1

   FETCH NEXT FROM cur_Buf into @iBuf_Id,@iBuf_Status

END

CLOSE cur_Buf

DEALLOCATE cur_Buf

PRINT '----OVER---'

SELECT @iShow_Id,@iShow_Status,@iShow_Count

 

 


2021年7月23日 星期五

[windows]DTC分散式交易機制

 Windows 上使用DB 且有用交易機制並且還用 link server 時 就有機會遇到這個問題

MSDTC(Microsoft Distributed Transaction Coordinator)服務是 Windows 協調跨越多個資源管理員的交易,比如資料庫、訊息佇列及檔案系統。

1、啟用 MSDTC 服務

  依序點選「開始」 → 「系統管理工具」 → 「服務」 → 「Distributed Transaction Coordinator」,開啟「Distributed Transaction Coordinator」視窗。

2、防火牆設定

  依序點選「開始」 → 「控制台」 → 「系統及安全性」 → 「Windows 防火牆」 → 「允許程式通過 Windows 防火牆」,進入「允許程式通過 Windows 防火牆通訊」設定頁面。

  按下【變更設定】,勾選「分散式交易協調器」。

3、設定 DTC

  依序點選「開始」 → 「系統管理工具」 → 「元件服務」,開啟「元件服務」視窗。

  選擇「元件服務」 → 「電腦」 → 「我的電腦」 → 「Distributed Transaction Coordinator」,於「本機 DTC」開啟右鍵選單,選擇「內容」,開啟「本機 DTC」視窗。

3.1 網路 DTC 存取

  勾選「網路 DTC」存取。

3.2 交易管理員通訊

  勾選「允取輸入」、「允取輸出」。

來源連結


[SQL]顯示千分位與小數顯示

  CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) CONVERT style參數說明 1  (expression為 money 或 smallmoney型別): 0 : 預設,保留小數位後兩位,並四捨...