發表文章

目前顯示的是有「T-SQL」標籤的文章

[T-SQL] 如何得到台灣村里經緯度及畫出村里界線

圖片
因為負責公司的open data專案而開始常常想 open data的應用 也想用利用open data做一些自己的作品 一直想用地理資訊呈現一些資料視覺化的效果 最近發現原來政府有公開村里的地理資訊資料 實在是太棒了 覺得自己繳的稅有了回報 政府公開的是shp檔 於是又摸索了一下如何把shp轉成SQL Server的地理物件 發現台灣很少有人寫到這一塊 於是我又雞婆的先來跟鄉民報告一下我是怎麼做的吧 在這裡 http://data.gov.tw/node/7438下載地理資訊 或是搜尋 村里界圖 村里經緯度 就可以找到 下載完之後解壓縮 先放著 趕緊再去下載一個很重要的轉檔程式 http://www.sharpgis.net/page/sql-server-2008-spatial-tools 下載完以後一樣要解壓縮 會看到資料夾裡面有Shape2sql執行檔 按二下之後會跳出這個畫面請你設定要連線的資料庫 如果暫時不連就先按Cancel 然後會跳出以下這個畫面 這才是正經的 在Shapefile的地方選擇你剛剛下載好並解壓縮的村里地理資訊資料裡的 .shp 檔案 接著按下Configure輸入你要上傳的資料庫連線資訊 如上圖 然後按下 upload to Database 幸運的話 你就會看到上傳的進度 等到上傳完成會跳出通知的視窗 如果不幸運的話 你可能會像我一樣遇到 系統缺少sqlspatial.dll的錯誤訊息 這時候就要去下載額外的功能套件 叫做   " Microsoft SQL Server System CLR Types "  http://www.microsoft.com/zh-TW/download/details.aspx?id=29065 裝好 Microsoft SQL Server System CLR Types 之後 再重新打開 Shape2sql重新上傳一次 應該就成功囉 你可以到你的資料庫裡面看有沒有多出一個資料表 上傳成功的資料表畫面如下 到空間結果的地方可以看到村里的界線圖 最重要的是資料表裡面已經有了Geometry物件 可以隨心所欲的做其它的運算 例如我運用了STCentriod這個method算...

SQL 日期跟時間的欄位合併後的查詢

將日期跟時間的欄位合併後 存在temp 再用between做搜尋 with temp as ( SELECT convert(char(11),Date)+convert(char(8),ImportTime) as DateTime,Symbol,Price FROM Stock WITH (nolock) Where (Date between '2014-02-26' and '2014-02-27') and Symbol = '1101' ) SELECT DateTime,Symbol,Price from temp Where DateTime BETWEEN '2014-02-26 10:00:00' AND '2014-02-27 11:00:00' order by DateTime

SQL - with nolock statement

因為我的資料庫是即時寫入資料 同時讀取資料的話會造成table鎖住 資料無法寫入 郭董說要治本的話得針對程式還有資料庫做優化 目前我只能用 nolock來應急了 SELECT Symbol, Price, Date, FROM Stock WITH (nolock) WHERE (Date = CONVERT(DATETIME, '2013-11-27 00:00:00', 102)) AND (Symbol = N'2330') 如果有where條件式的話 WITH (nolock) 要放在 From table名稱的後面

T-SQL 日期跟時間合併

之前為了方便處理所以把資料庫裡面的日期跟時間切開 但是現在為了R建模方便,又得把他併在一起了 本來查了網路 有人說是用&就可以併在一起 結果根本是騙肖A 後來又查到其實是用+ 但是日期和時間不能直接用+ 要先轉成字串 範例如下 SELECT Symbol,Name,convert(char(11),Date)+convert(char(8),Time)as DateTime, Price FROM dbname

SQL-運用CASE改變輸出的條件

這個例子是因為我的資料來源有前一個工作天的收盤價 所以我就很自然的把前一天的收盤價撈出來 然後把今天的日期減1天 就是昨天的收盤了 後來才想到如果是星期一的話 那收盤日就會變成星期日了 所以就寫了以下的語法修改 SELECT distinct Symbol,(CASE WHEN DATENAME(weekday, Date)='星期一' THEN DATEADD(day, -3, Date) WHEN DATENAME(weekday, Date) '星期一' THEN DATEADD(day, -1, Date) ELSE Date END) Date, PriorPrice AS ClosePrice FROM Stock order by Symbol,Date 如果直接update的話 範例如下 Update StockClosePrice SET Date = CASE WHEN DATENAME(weekday, Date)='星期日' THEN DATEADD(day, -2, Date) ELSE Date END

T-SQL轉換Time格式只到"分"

SQL裡的Time資料型態預設為hh:mm:ss,也就是最少要顯示到秒 可是我只需要取到分呀 本來傻傻的這樣寫 SELECT SUBSTRING([系統時間], 1, 5) 結果馬上報錯了 SUBSTRING不可以用在時間的資料型態上 後來又查了一下 忽然有一個靈感 於是這樣 SELECT CONVERT(char(5), [系統時間], 108) as newTime 成了!