markdown
```
SELECT
c.name '欄位名稱',
ep.value AS '欄位備註',
t.Name '欄位型態',
c.max_length '最大byte',
c.precision '總位數',
c.scale '小數位數',
c.is_nullable '是否可為空',
ISNULL(i.is_primary_key, 0) '是否是PK'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
INNER JOIN sys.objects ON sys.objects.object_id = c.object_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
OUTER APPLY fn_listextendedproperty(default,
'SCHEMA', schema_name(sys.objects.schema_id),
'TABLE', sys.objects.name, 'COLUMN', c.name) ep
WHERE
c.object_id = OBJECT_ID('your table name')
```
ref:
https://stackoverflow.com/questions/2418527/sql-server-query-to-get-the-list-of-columns-in-a-table-along-with-data-types-no
https://devio.wordpress.com/2009/08/19/retrieving-table-and-column-descriptions-in-sql-server/
2018年3月14日 星期三
IIS 安裝Windows 驗證功能 需要重開機嗎? | Does IIS after install Windows authentication function, need restart?
不用
NO
因為要在正式機操作,安全起見才去問&本機測測看....
NO
因為要在正式機操作,安全起見才去問&本機測測看....
2018年3月13日 星期二
SQL Server 無法在 date 上呼叫方法
markdown
#背景
我原本有個view
在伺服器1 資料庫A (1-A)
跨到伺服器1 資料庫B (1-B)
現在這個view移到 伺服器2 資料庫A (2-A) 跨到1-B
建好1到2的db link後
在ssms更新view的sql並執行,出現一個錯誤訊息:
無法在date上呼叫方法
SQL語法直接按新增查詢是可以跑出來結果,
但在SSMS VIEW的語法設計中執行就會出現這個錯誤
#解法
先在GOOGLE找到MSDN上的SQL SERVER錯誤訊息代碼表
https://technet.microsoft.com/zh-tw/library/cc645611(v=sql.105).aspx
然後切成英文,找到關鍵字Cannot Call Methods on
重新搜尋 就找到stackoverflow的討論串
https://stackoverflow.com/questions/16180347/sql-server-cannot-call-methods-on-date
原來是ssms的bug
後來用語法
alter view [view name] as [sql command] 就成功更新了
#背景
我原本有個view
在伺服器1 資料庫A (1-A)
跨到伺服器1 資料庫B (1-B)
現在這個view移到 伺服器2 資料庫A (2-A) 跨到1-B
建好1到2的db link後
在ssms更新view的sql並執行,出現一個錯誤訊息:
無法在date上呼叫方法
SQL語法直接按新增查詢是可以跑出來結果,
但在SSMS VIEW的語法設計中執行就會出現這個錯誤
#解法
先在GOOGLE找到MSDN上的SQL SERVER錯誤訊息代碼表
https://technet.microsoft.com/zh-tw/library/cc645611(v=sql.105).aspx
然後切成英文,找到關鍵字Cannot Call Methods on
重新搜尋 就找到stackoverflow的討論串
https://stackoverflow.com/questions/16180347/sql-server-cannot-call-methods-on-date
原來是ssms的bug
後來用語法
alter view [view name] as [sql command] 就成功更新了
2018年3月2日 星期五
2018年2月5日 星期一
LUIS訓練筆記
markdown
之前訓練過的筆記,只記在trello,也順便貼過來
之前訓練過的筆記,只記在trello,也順便貼過來
筆記
Utterances 話語
話語就是你應用程式期望會收到並想要解釋的使用者查詢語句
增加話語來訓練LUIS讓他懂類似的語句
增加話語來訓練LUIS讓他懂類似的語句
Intent 意圖
意圖就是動機或者有預期的行動
有個盲點就是有話語通常有意圖
但不一定能從話語中找出實體
這是過去我一直卡住的地方
所以訓練才會卡卡的
應該要把意圖與實體分開看
有個盲點就是有話語通常有意圖
但不一定能從話語中找出實體
這是過去我一直卡住的地方
所以訓練才會卡卡的
應該要把意圖與實體分開看
Entities 實體
實體就是在你應用程式領域中關鍵的資料
例如 關鍵字 日期 班機號碼 天數
例如一個請假功能 輸入
透過意圖訓練可以辨識出請假的意圖
但在語句中抓出的實體應該為
例如 關鍵字 日期 班機號碼 天數
例如一個請假功能 輸入
我想在下周三請兩小時的假透過意圖訓練可以辨識出請假的意圖
但在語句中抓出的實體應該為
下周三、兩小時
2018年2月2日 星期五
SQL Server 民國日期時間 數字轉datetime | SQL Server Taiwan Calander date and time number to datetime
markdown
```
--原始欄位:
--民國年數字date_number,時間數字time_number
--(ex:971201,6)
--將民國數字轉西元字串
select cast(970101+19110000 as varchar(8)) --output:20080101
--將西元字串轉YYYY-MM-DD字串
select SUBSTRING(cast(970101+19110000 as varchar(8)),1,4)+'-'
+SUBSTRING(cast(970101+19110000 as varchar(8)),5,2)+'-'
+SUBSTRING(cast(970101+19110000 as varchar(8)),7,2) --output:2008-01-01
--將時分數字PAD成時分秒,在零點時可能只有個位數 如 00:06 =6
select REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') --output:000006
--將補齊的時分秒轉為HH:MM:SS字串
select substring(REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') ,1,2)+':'
+substring(REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') ,3,2)+':'
+substring(REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') ,5,2) --output:00:00:06
--將時間字串與時分秒字串轉為DATETIME
select convert(datetime,
SUBSTRING(cast(970101+19110000 as varchar(8)),1,4)+'-'
+SUBSTRING(cast(970101+19110000 as varchar(8)),5,2)+'-'
+SUBSTRING(cast(970101+19110000 as varchar(8)),7,2)
+' '
+substring(REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') ,1,2)+':'
+substring(REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') ,3,2)+':'
+substring(REPLACE(STR(cast(6 as varchar(6)), 6), SPACE(1), '0') ,5,2)
,121) --output:2008-01-01 00:00:06.000
```
2018年1月25日 星期四
Kendo UI Grid Filter DatePicker 過濾時分秒 | Kendo UI Grid Filter DatePicker truncate time
markdown
#背景
當grid使用server端做分頁排序篩選時,查詢的邏輯就是靠`ToDataSourceResult`來控制,
所以改不了內容在幹嘛,
當前端Grid需要篩選某日期欄位,該欄位又有時分秒,且使用者不想設定秒數時,
預設的時間篩選欄位只會傳入年月日到後端,時分秒為零,
但這樣在做小於等於或者等於的查詢時就會遇到時分秒不相同而查不到資料的問題,
如果是自己做api,這種小地方可以調整用`System.Data.Entity.DbFunctions.TruncateTime()`來過濾時間,但用Telerik的類別處理時就不行了,
後來查到官方的解法如連結
https://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/filtering/filter-by-date
大致上就是說要在filter menu初始化時,複寫套用的按鈕的事件,
例如原本設"等於"條件時,只會傳入一個邏輯就是相等一個日期時間值,
我們要調整為兩個邏輯,
用大於等於當天的零點零分零秒與 小於等於當天的23點59分59秒兩個條件傳入後端,
這樣就可以避免對不上時間的問題了
```
filterMenuInit: function (e) { //當日期條件設定為小於/等於時 只會傳入年月日 不會傳入時分秒 //但這樣會撈不到當天0點之後的資料 所以要幫他加到23:59:59來方便處理 //(因為沒辦法調整語法為trunc time) var menu = $(e.container); if (e.field === "ColumnDateTime") { var firstDropDown = $('[data-bind="value: filters[0].operator"]').data('kendoDropDownList'); menu.find('button[type="submit"]').click(function (ev) { if (firstDropDown.value() === 'eq') { ev.preventDefault(); var selectedDate = menu.find('[data-role="datepicker"]').first().data('kendoDatePicker').value(); if (!selectedDate) { $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } var startOfFilterDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()); var endOfFilterDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 23, 59, 59); var filter = { logic: "and", filters: [ { field: "ColumnDateTime", operator: "gte", value: startOfFilterDate }, { field: "ColumnDateTime", operator: "lte", value: endOfFilterDate } ] }; e.sender.dataSource.filter(filter); $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } else if (firstDropDown.value() === 'le') { ev.preventDefault(); var selectedDate = menu.find('[data-role="datepicker"]').first().data('kendoDatePicker').value(); if (!selectedDate) { $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } var endOfFilterDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 23, 59, 59); var filter = { logic: "and", filters: [ { field: "ColumnDateTime", operator: "lte", value: endOfFilterDate } ] }; e.sender.dataSource.filter(filter); $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } }); } }, ```
#背景
當grid使用server端做分頁排序篩選時,查詢的邏輯就是靠`ToDataSourceResult`來控制,
所以改不了內容在幹嘛,
當前端Grid需要篩選某日期欄位,該欄位又有時分秒,且使用者不想設定秒數時,
預設的時間篩選欄位只會傳入年月日到後端,時分秒為零,
但這樣在做小於等於或者等於的查詢時就會遇到時分秒不相同而查不到資料的問題,
如果是自己做api,這種小地方可以調整用`System.Data.Entity.DbFunctions.TruncateTime()`來過濾時間,但用Telerik的類別處理時就不行了,
後來查到官方的解法如連結
https://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/filtering/filter-by-date
大致上就是說要在filter menu初始化時,複寫套用的按鈕的事件,
例如原本設"等於"條件時,只會傳入一個邏輯就是相等一個日期時間值,
我們要調整為兩個邏輯,
用大於等於當天的零點零分零秒與 小於等於當天的23點59分59秒兩個條件傳入後端,
這樣就可以避免對不上時間的問題了
```
filterMenuInit: function (e) { //當日期條件設定為小於/等於時 只會傳入年月日 不會傳入時分秒 //但這樣會撈不到當天0點之後的資料 所以要幫他加到23:59:59來方便處理 //(因為沒辦法調整語法為trunc time) var menu = $(e.container); if (e.field === "ColumnDateTime") { var firstDropDown = $('[data-bind="value: filters[0].operator"]').data('kendoDropDownList'); menu.find('button[type="submit"]').click(function (ev) { if (firstDropDown.value() === 'eq') { ev.preventDefault(); var selectedDate = menu.find('[data-role="datepicker"]').first().data('kendoDatePicker').value(); if (!selectedDate) { $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } var startOfFilterDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()); var endOfFilterDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 23, 59, 59); var filter = { logic: "and", filters: [ { field: "ColumnDateTime", operator: "gte", value: startOfFilterDate }, { field: "ColumnDateTime", operator: "lte", value: endOfFilterDate } ] }; e.sender.dataSource.filter(filter); $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } else if (firstDropDown.value() === 'le') { ev.preventDefault(); var selectedDate = menu.find('[data-role="datepicker"]').first().data('kendoDatePicker').value(); if (!selectedDate) { $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } var endOfFilterDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate(), 23, 59, 59); var filter = { logic: "and", filters: [ { field: "ColumnDateTime", operator: "lte", value: endOfFilterDate } ] }; e.sender.dataSource.filter(filter); $(ev.target).closest('[data-role="popup"]').data('kendoPopup').close(); return; } }); } }, ```
訂閱:
文章 (Atom)

