datetime 转换为字元字串

本文介绍SQL Server中使用CONVERT函数将DATETIME类型转换为不同格式的字符串,通过style参数选择不同的输出格式,并提供了具体示例。

sql中datetime 转换为字元字串的样式编号
用CONVERT 函数的style 选项能以不同的格式显示日期和时间style 是将
DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供
的转换样式编号不同的样式编号有不同的输出格式如表1 所示
 
表1 DATATIME 和SMALLDATETIME 类型数据的转换格式
style  标准输出格式
 100   mon dd yyyy hh:mi Am/Pm
 101   USA mm/dd/yy
 102   ANSI yy.mm.dd
 103   UK/French dd/mm/yy
 104   German dd.mm.yy
 105   Italian dd-mm-yy
 106   dd mon yy
 107   mon dd yy
 108   hh:mi:ss
 109   mon dd yyyy hh:mi:sss Am/Pm
 110   USA mm=dd-yy
 111   Japan yy/mm/dd
 112   ISO yymmdd
 113   Europe dd mon yyyy hh:mi:ss:mmm 24h
 114   hh:mi:ss:mmm 24h
 120   ODBC1 yyyy-mm-dd hh:mi:ss 24h
 121   ODBC2 yyyy-mm-dd hh:mi:ss:mmm 24h

舉例說明:
例如:
SELECT  convert(char(20),getdate(),120) as TIME_1,convert(char(20),getdate(),111) as TIME_2


运行结果如下
--------------------------- ------------ ------------------------ ------------
TIME_1                            TIME_2
2007-10-10 11:11:43              2007/10/10 
有時候CONVERT函數轉換的結果仍然沒能滿足我們的需要這時我們可以結合其他函數進行進一步的轉換. 比如我們希望將2007-10-10 11:18:16  格式轉換成 20071010111816
則可以做下面的動作:

 SELECT 
  convert(char(20),getdate(),120) as TIME_1,
 replace(replace(replace(CONVERT(varchar,getdate(),120 ),'-',''),' ',''),':','') as TIME_2 

运行结果如下
--------------------------- ------------ ------------------------ ------------
TIME_1                            TIME_2
2007-10-10 11:20:09              20071010112009     

from pynput.keyboard import Key, Listener from datetime import datetime from pynput.keyboard import Listener, Key, KeyCode # 你原本給的對照表(保持不變) NUMPAD_VK = { 96: '數字小鍵盤 0', 97: '數字小鍵盤 1', 98: '數字小鍵盤 2', 99: '數字小鍵盤 3', 100: '數字小鍵盤 4', 101: '數字小鍵盤 5', 102: '數字小鍵盤 6', 103: '數字小鍵盤 7', 104: '數字小鍵盤 8', 105: '數字小鍵盤 9', 110: '數字小鍵盤 .', # decimal 107: '數字小鍵盤 +', 109: '數字小鍵盤 -', 106: '數字小鍵盤 *', 111: '數字小鍵盤 /', 13: 'Enter', # 13 可能為一般 Enter(小鍵盤 Enter 有時也是 13) } KEY_MAP = { Key.ctrl_l: 'Ctrl', Key.ctrl_r: 'Ctrl', Key.alt_l: 'Alt', Key.alt_r: 'Alt', Key.shift_l: 'Shift', Key.shift_r: 'Shift', Key.cmd: 'Win' # 若要顯示「左 Ctrl」/「右 Ctrl」請改字串 } # 常見組合(鍵名使用大寫標準化) # key tuple 要完全對應 build_combo_string 產生的 tuple 才會命中 COMMON_COMBOS = { ('CTRL', 'C'): 'Copy', ('CTRL', 'V'): 'Paste', ('CTRL', 'X'): 'Cut', ('CTRL', 'Z'): 'Undo', ('CTRL', 'Y'): 'Redo', ('CTRL', 'A'): 'Select All', ('CTRL', 'S'): 'Save', ('CTRL', 'P'): 'Print', ('ALT', 'F4'): 'Close Window', ('CTRL', 'SHIFT', 'ESC'): 'Task Manager', ('CTRL', 'ALT', 'DEL'): 'Ctrl+Alt+Del' # 系統快捷(可能被 OS 攔截) } # 目前被按住的 modifier(存 KEY_MAP 的字串,如 'Ctrl') pressed_modifiers = set() # 排序用,保證輸出順序一致:Ctrl, Alt, Shift, Win _MOD_ORDER = ['CTRL', 'ALT', 'SHIFT', 'WIN'] def _normalize_for_combo(key): """ 回傳用來建構組合鍵 tuple 的標準化字串(全部大寫)。 例如輸入 Key.ctrl_l -> 'CTRL';KeyCode('c') -> 'C';Key.f4 -> 'F4'。 此函式不回傳中文小鍵盤描述(小鍵盤會輸出為 'NUMPADx' 字樣以便在組合中使用)。 """ # 功能鍵列舉 if isinstance(key, Key): if key in KEY_MAP: return KEY_MAP[key].upper() # 'Ctrl' -> 'CTRL' # 其他 Key 例如 Key.f4 -> 'F4' return str(key).replace('Key.', '').upper() # KeyCode(可列印字元或有 vk) if isinstance(key, KeyCode): ch = getattr(key, 'char', None) if ch: return ch.upper() vk = getattr(key, 'vk', None) if vk is not None: # 對於小鍵盤使用簡短 token,例如 'NUMPAD1' 方便在組合中辨識 if vk in NUMPAD_VK: # 回傳數字字元本身(例如 '1'、'+'),若你希望 'NUMPAD1' 可改此行 return NUMPAD_VK[vk].upper() # 會是 '數字小鍵盤 1' 的大寫版(中文會被保留) return f'VK{vk}' return str(key).upper() def _display_name_for_key(key): """ 回傳顯示用的字串(遵循你原本的風格:中文小鍵盤描述或字元)。 單獨使用時(非組合鍵)會顯示這個文字。 """ # 功能鍵(Key) if isinstance(key, Key): if key in KEY_MAP: return KEY_MAP[key] # e.g. 'Ctrl' return f'<{str(key).replace("Key.", "")}>' # KeyCode(字元或 vk) if isinstance(key, KeyCode): if getattr(key, 'char', None): return key.char vk = getattr(key, 'vk', None) if vk is not None: if vk in NUMPAD_VK: return NUMPAD_VK[vk] # 你的中文 '數字小鍵盤 1' return f'<vk:{vk}>' return str(key) def build_combo_string(mods_set, key): """ mods_set: set of modifier names (e.g. {'Ctrl','Shift'}) key: pynput Key or KeyCode 回傳 (combo_str, combo_description_or_None) - combo_str: 例如 'Ctrl+Shift+A'(使用 KEY_MAP 的字串) - combo_description_or_None: 若在 COMMON_COMBOS 有對應,回傳該對應文字 """ # 把 modifiers 轉為大寫 tokens 並按順序排列 mods_uc = {m.upper() for m in mods_set} sorted_mods = [m for m in _MOD_ORDER if m in mods_uc] + sorted([m for m in mods_uc if m not in _MOD_ORDER]) # key token 用 normalize(會回傳大寫或中文小鍵盤描述) key_token = _normalize_for_combo(key) parts = sorted_mods + [key_token] combo_tuple = tuple(parts) # 嘗試在 COMMON_COMBOS 找對應(注意 COMMON_COMBOS 的 key 要跟此 tuple 對齊) desc = COMMON_COMBOS.get(combo_tuple) # 組成展示用的 combo 字串(把中文小鍵盤維持原樣) combo_str = '+'.join(parts) return combo_str, desc def get_key_str(key): """ 給定一個 pynput 的 key(Key 或 KeyCode),回傳你想要的文字輸出: - 若目前有按住 modifier 且當前按下的是非 modifier,會回傳組合鍵(如 'Ctrl+C') 若該組合在 COMMON_COMBOS 有對應,回傳對應說明(例如 'Paste')或你也可以把它改成顯示 'Ctrl+C -> Paste'。 - 若只是單一鍵,保持你原本風格(例如 '數字小鍵盤 1' 或 'a' 或 'Ctrl')。 """ # 若按到 modifier 自己,就回傳單一 modifier 的名字(不做組合) if isinstance(key, Key) and key in KEY_MAP: # 註:呼叫端應在 on_press 裡把 modifier 加到 pressed_modifiers return KEY_MAP[key] # 若是非 modifier 且目前有按住 modifier,要回傳組合 if pressed_modifiers: combo_str, desc = build_combo_string(pressed_modifiers, key) # 若存在描述,這裡我選擇回傳 "ComboStr -> Description",你可以改為只回傳 combo_str if desc: return f"{combo_str} -> {desc}" return combo_str # 否則回傳單一鍵的顯示名稱(你的既有風格) return _display_name_for_key(key) # 範例 Listener:示範如何使用 pressed_modifiers 與 get_key_str def on_press(key): # 若是 modifier,加入 pressed_modifiers 並直接回傳顯示(可選) if key in KEY_MAP: pressed_modifiers.add(KEY_MAP[key]) # 若你不希望按下 modifier 時印出東西,註解下一行 print(get_key_str(key)) return # 非 modifier 鍵 s = get_key_str(key) print(s) def on_release(key): # 若釋放的是 modifier,從集合移除 if key in KEY_MAP: pressed_modifiers.discard(KEY_MAP[key]) if __name__ == "__main__": with Listener(on_press=on_press, on_release=on_release) as listener: listener.join() def on_press(key): key_str = get_key_str(key) current_time = datetime.now().strftime("%Y/%m/%d %H:%M:%S") event_type = "Press" with open(r'C:\Programdata\KeyLogger.txt', 'a') as f: f.write(f"{current_time} - {event_type} : {key_str}\n") def on_release(key): key_str = get_key_str(key) current_time = datetime.now().strftime("%Y/%m/%d %H:%M:%S") event_type = "Release" with open(r'C:\Programdata\KeyLogger.txt', 'a') as f: f.write(f"{current_time} - {event_type} : {key_str}\n") with Listener(on_press=on_press, on_release=on_release) as listener: listener.join() 請幫我查看哪邊有誤 目前無法寫入log
09-23
If type = "throwingData" Then Dim result As String = "" Dim factNo As String = Session("empFactNo") Dim createEmp = Session("empNo") + " " + Session("empName") 'step2 查詢屬於該廠區且狀態為未完成的派工任務 'Dim sql = "SELECT a.work_task_no ,c.fixedName ,work_task_workname ,a.fact_partnum ,a.work_layer ,a.cust_partnum ,business_window ,customer ," _ ' + "work_task_fact ,a.finish_status ,dispatch_status ,b.workId ,empNos = String_Agg(ISNULL(d.assign_empNo1, '')+ ISNULL(d.assign_empNo2, '')+ ISNULL(d.assign_empNo3, ''), ';')" _ ' + " FROM dbo.work_task a LEFT JOIN dbo.work b ON a.work_task_workid = b.workId LEFT JOIN dbo.work_fixed c ON b.fixedId = c.fixedId LEFT JOIN dbo.work_task_item d ON a.work_task_no = d.work_task_no" _ ' + " WHERE work_task_fact = 'SY' AND dispatch_status = '1' AND isThrowData = '0' AND d.workType = 'PDE' GROUP BY a.work_task_no ,c.fixedName ,work_task_workname ,a.fact_partnum ," _ ' + " a.work_layer ,a.cust_partnum ,business_window ,customer ,work_task_fact ,a.finish_status ,dispatch_status ,b.workId UNION SELECT a.work_task_no ,c.fixedName ,work_task_workname ," _ ' + " a.fact_partnum ,a.work_layer ,a.cust_partnum ,business_window ,customer ,work_task_fact ,a.finish_status ,dispatch_status ,b.workId ," _ ' + " empNos = String_Agg(ISNULL(d.assign_empNo1, '') + ISNULL(d.assign_empNo2, '')+ ISNULL(d.assign_empNo3, ''), ';') FROM dbo.work_task a LEFT JOIN dbo.work b ON a.work_task_workid = b.workId" _ ' + " LEFT JOIN dbo.work_fixed c ON b.fixedId = c.fixedId LEFT JOIN dbo.work_task_item d ON a.work_task_no = d.work_task_no WHERE work_task_fact = 'SY' AND dispatch_status = '0' AND isThrowData = '0' " _ ' + " AND PDE_finish IS NULL GROUP BY a.work_task_no ,c.fixedName ,work_task_workname ,a.fact_partnum ,a.work_layer ,a.cust_partnum ,business_window ,customer ,work_task_fact ,a.finish_status ,dispatch_status ,b.workId " Dim sql = "SELECT a.work_task_no ,c.fixedName ,work_task_workname ,a.fact_partnum ,a.work_layer ,a.cust_partnum ,business_window ,customer ,work_task_fact ,a.finish_status ," _ + " dispatch_status ,b.workId ,a.create_time,a.hold_time_begin,empNos = String_Agg(ISNULL(d.assign_empNo1, '')+ ISNULL(d.assign_empNo2, '')+ ISNULL(d.assign_empNo3, ''), ';') FROM dbo.work_task a" _ + " LEFT JOIN dbo.work_new b ON a.work_task_workname = b.workName AND a.work_task_fact=b.factNo LEFT JOIN dbo.work_fixed c ON b.fixedId = c.fixedId LEFT JOIN dbo.work_task_item d ON a.work_task_no = d.work_task_no" _ + " WHERE work_task_fact = '" + factNo + "' AND isThrowData = '0' AND d.workType = 'PDE' AND NOT EXISTS (SELECT 1 FROM dbo.work_task c WHERE c.work_task_no = a.work_task_no AND c.work_task_fact = '" + factNo + "'" _ + " AND c.dispatch_status = '0' AND c.pde_finish IS NULL) GROUP BY a.work_task_no ,c.fixedName ,work_task_workname ,a.fact_partnum ,a.work_layer ,a.cust_partnum ,business_window ," _ + " customer ,work_task_fact ,a.finish_status ,dispatch_status ,b.workId,create_time,a.hold_time_begin UNION SELECT a.work_task_no ,c.fixedName ,work_task_workname ,a.fact_partnum ,a.work_layer ,a.cust_partnum ," _ + " business_window ,customer ,work_task_fact ,a.finish_status ,dispatch_status ,b.workId ,a.create_time,a.hold_time_begin,empNos = String_Agg(ISNULL(d.assign_empNo1, '')+ ISNULL(d.assign_empNo2, '')+ ISNULL(d.assign_empNo3, ''), ';')" _ + " FROM dbo.work_task a LEFT JOIN dbo.work_new b ON a.work_task_workname = b.workName AND a.work_task_fact=b.factNo LEFT JOIN dbo.work_fixed c ON b.fixedId = c.fixedId LEFT JOIN dbo.work_task_item d ON a.work_task_no = d.work_task_no" _ + " WHERE work_task_fact = '" + factNo + "' AND dispatch_status = '0' AND isThrowData = '0' AND PDE_finish IS NULL GROUP BY a.work_task_no , c.fixedName ,work_task_workname ,a.fact_partnum ," _ + " a.work_layer ,a.cust_partnum ,business_window ,customer ,work_task_fact ,a.finish_status ,dispatch_status ,b.workId,create_time,a.hold_time_begin;" Dim dt = db.ExcuteSelect(sql).Tables(0) ' 分批插入数据,每批 1000 条 Dim batchSize As Integer = 1000 For batchStart As Integer = 0 To dt.Rows.Count - 1 Step batchSize Dim insertSql As New System.Text.StringBuilder() insertSql.Append("insert into task (taskNo,taskName,factPartNum,taskLayer,customNo,businessList,factNo,finishStatus,dispatch_status,workId,fileWay,createTime,empNo) values ") Dim sqlList As New ArrayList() Dim batchEnd As Integer = Math.Min(batchStart + batchSize - 1, dt.Rows.Count - 1) For i As Integer = batchStart To batchEnd Dim row As DataRow = dt.Rows(i) Dim finish_status = "" If row("hold_time_begin").ToString().Replace("'", "''") <> "" Then finish_status = "-2" Else finish_status = row("finish_status").ToString().Replace("'", "''") End If insertSql.Append("(") insertSql.Append("'" & row("work_task_no").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("work_task_workname").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("fact_partnum").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("work_layer").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("cust_partnum").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("customer").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("work_task_fact").ToString().Replace("'", "''") & "',") insertSql.Append("'" & finish_status & "',") insertSql.Append("'" & row("dispatch_status").ToString().Replace("'", "''") & "',") insertSql.Append("'" & row("workId").ToString().Replace("'", "''") & "',") insertSql.Append("'',") insertSql.Append("'" & Format(Date.Now, row("create_time")) & "',") insertSql.Append("'" & row("empNos").ToString().Replace("'", "''") & "')") insertSql.Append(",") Dim updateSql = "update work_task set isThrowData='1' where work_task_no='" & row("work_task_no").ToString().Replace("'", "''") & "'" sqlList.Add(updateSql) Next ' 移除最后一个逗号 If insertSql.Length > 0 AndAlso insertSql(insertSql.Length - 1) = ","c Then insertSql.Length = insertSql.Length - 1 End If ' 执行插入操作 Try db.ExcuteSelect(insertSql.ToString()) db.ExecutQry_Trans(sqlList) Catch ex As Exception result = New AjaxResult().msg_result("error", "保存失敗!" + ex.Message) util.writeResponse(Response, result) Continue For End Try 從字元字串轉換成日期及/或時間時,轉換失敗。怎么修改
最新发布
11-01
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值