24、SQLite中Oracle函數(shù)的替代方法
1) nvl => ifnull
nvl直接替換為ifnull即可
注意:僅檢查值為null的情況旷偿,假如為空字符串('')則不會(huì)觸發(fā)烹俗,在這種情況下不能直接替換
2) decode => case when then
Oracle
SELECT ID, DECODE(inParam, 'byComparedParam', '值1' , '值2') name FROM test_table;
--如果第一個(gè)參數(shù) inParam == 'byComparedParam',則 select 得到的 name 顯示為值1
--如果第一個(gè)參數(shù) inParam != 'byComparedParam'萍程,則 select 得到的 name 顯示為值2
SQLite
select report_code, year, month, day, wind_speed,
case
when wind_speed >= 40 then 'HIGH'
when wind_speed >= 30 and wind_speed < 40 then 'MODERATE'
else 'LOW'
end as wind_severity
from station_data
3) to_char => strftime
Oracle
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual
SQLite
select strftime('%Y-%m-%d %H:%M:%S', 'now') from t_b_database_basic t
--select strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime') from t_b_database_basic t
select strftime('%Y-%m-%d %H:%M:%S', t.fcreate_time) from t_b_database_basic t
需要注意的是幢妄,假如轉(zhuǎn)換為字符串的是代表當(dāng)前時(shí)間的'now',結(jié)果將會(huì)是utc時(shí)間茫负,顯示為當(dāng)?shù)貢r(shí)間需添加修飾符'localtime'蕉鸳,假如轉(zhuǎn)換的是字段就不用擔(dān)心這個(gè)問題,原因可能是因?yàn)閮?nèi)部處理的所有時(shí)間都默認(rèn)為utc時(shí)間
4) to_date => datetime
Oracle
insert into t_timestamp_temp (create_time) values (to_date('2008-08-08 08:08:08' , 'yyyy-mm-dd hh24:mi:ss'));
SQLite
insert into t_timestamp_temp (create_time) values (datetime('2008-08-08 08:08:08'));
--insert into t_timestamp_temp (create_time) values (datetime('now', 'localtime'));
需要注意的是朽褪,轉(zhuǎn)換為日期時(shí)默認(rèn)處理的是utc時(shí)間置吓,因此使用本地時(shí)間的固定字符串時(shí)不要添加修飾符'localtime',否則時(shí)間會(huì)根據(jù)時(shí)區(qū)改變缔赠,只有在使用'now'時(shí)才需要添加'localtime'修飾符
5) listagg => group_concat
Oracle
--param_code排序并拼接為字符串
select listagg(d.fparam_code, ',') within group(order by d.fparam_code)
from t_b_meter_detail d where d.fmeter_no = 1
SQLite
--param_code拼接為字符串衍锚,可分組,不可排序
select group_concat(d.fparam_code, ',')
from t_b_meter_detail d
group by d.fmeter_no
6) merge into => insert into (...) select ... from ...(merge into替代方法的其中一種)
Oracle
merge into t_b_meter t using t_b_esubstation m
on (upper(t.fparent_meter_no) = 'ROOT' and t.fmeter_no = m.fstation_code)
when not matched then
insert (fid, fparent_meter_no, fmeter_no, fmeter_mark, fguihao, fmeter_type_code, fmodule_code)
values (seq_b_meter.nextval, 'ROOT', m.fstation_code, m.fstation_name, m.fstation_name, '0', '0')
SQLite
(when not matched部分)與Oracle的語法相比嗤堰,需要將表名提到insert語句中戴质,insert語句的字段部分保持不變,values部分直接替換為select踢匣,而select從句部分需要有where條件限制以驗(yàn)證using表的字段在merge into表中不存在
insert into t_b_meter (fparent_meter_no, fmeter_no, fmeter_mark, fguihao, fmeter_type_code, fmodule_code)
select 'ROOT', m.fstation_code, m.fstation_name, m.fstation_name, '0', '0' from t_b_esubstation m
where m.fstation_code not in (select t.fmeter_no from t_b_meter t where upper(t.fparent_meter_no) = 'ROOT')
7) merge into => insert into (...) ; update ... (merge into 替代方法的另外一種)
Oracle
merge into #{TableName} t using (select #{CabinetCode} fguihao from dual) s on (s.fguihao = t.fguihao)
when matched then
update set fmeter_no = #{MeterNo}, fcomm_error = #{CommError}
when not matched then
insert (fmeter_no, fguihao, fcomm_error) values (#{MeterNo}, #{CabinetCode}, #{CommError})
SQLite
當(dāng)merge into中存在when not matched和when matched兩部分告匠,需拆分為insert和update語句兩部分,其中insert對(duì)應(yīng)when not matched部分离唬,在上文小節(jié)6)中提到
(when matched部分)與Oracle的語法相比后专,需要將表名提到update語句中,update語句的字段部分保持不變输莺,然后在已有基礎(chǔ)上需要添加where從句限制以驗(yàn)證merge into表數(shù)據(jù)符合using表的條件
insert into #{TableName} (fmeter_no, fguihao, fcomm_error)
select #{MeterNo}, #{CabinetCode}, #{CommError} from dual
where #{CabinetCode} not in (select t.fguihao from #{TableName} t);
update #{TableName} set fmeter_no = #{MeterNo}, fcomm_error = #{CommError}
where fguihao = #{CabinetCode,jdbcType=VARCHAR}
8) 查詢所有表 user_tables => sqlite_master
Oracle
select table_name from user_tables
order by table_name
SQLite
SELECT name table_name FROM sqlite_master
WHERE type='table' --類型有table, trigger等
ORDER BY name;
9) 查詢表字段 user_tab_columns => pragma table_info(...)
Oracle
select u.column_name, u.data_type, u.table_name from user_tab_columns u
where u.table_name = '#{TableName}'
order by u.column_name
SQLite
pragma table_info('#{TableName}')
name對(duì)應(yīng)column_name戚哎,type對(duì)應(yīng)data_type
n) =>
Oracle
SQLite
25苞笨、SQLite小知識(shí)
1) 限制返回結(jié)果條數(shù)
select * from t_b_meter limit 20
26褪贵、Windows開機(jī)自動(dòng)登錄
1) 步驟
打開運(yùn)行,運(yùn)行命令:netplwiz
取消下圖中勾選框,點(diǎn)擊應(yīng)用并輸入用戶名密碼宪塔,然后確定即可
2) 假如沒有勾選框
運(yùn)行命令regedit若治,打開注冊(cè)表城榛,在地址欄輸入
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device
然后回車芽腾,將DevicePasswordLessBuildVersion項(xiàng)的值改成0然后確定
修改完成后再重新進(jìn)行步驟1)即可
27、BOOTP/DHCP配置工具一般配置步驟
1) 打開軟件后疏唾,有些工具會(huì)自動(dòng)搜索MAC地址蓄氧,假如不支持就手動(dòng)點(diǎn)擊界面的搜索功能按鈕
2) 設(shè)置IP
2.1) Ethernet IP Configuration 工具
選中要設(shè)置的設(shè)備,點(diǎn)enable dhcp荸实,再輸入要設(shè)置的ip匀们,然后點(diǎn)set ip configuration
2.2) BootP DHCP Commissioning Tool
點(diǎn)擊“Add Relation”(或“Add to Relation List”),輸入IP地址准给,點(diǎn)擊“OK”
2.3) IP Setting Tool
選中設(shè)備泄朴,點(diǎn)擊“IP地址設(shè)定”,在彈出窗口內(nèi)輸入IP地址露氮,并點(diǎn)擊“OK”
3) 最好點(diǎn)disable bootp/dhcp祖灰,或者其它關(guān)閉BOOTP/DHCP功能的方法,以使設(shè)置的ip地址成為靜態(tài)的
28畔规、反正切函數(shù)相加減的公式
arctan A + arctan B=arctan[(A+B) / (1-AB)]
arctan A - arctan B=arctan[(A-B) / (1+AB)]
29局扶、程序延時(shí)開機(jī)啟動(dòng)
要實(shí)現(xiàn)程序的延時(shí)啟動(dòng),可以通過創(chuàng)建一個(gè)批處理文件來實(shí)現(xiàn)叁扫。以下是在Windows系統(tǒng)中實(shí)現(xiàn)程序延時(shí)啟動(dòng)的步驟:
1) 打開文本編輯器(例如記事本)
在文本編輯器中輸入以下內(nèi)容:
@echo off
timeout /t [延時(shí)時(shí)間(秒)]
start “” “[程序路徑]”
其中三妈,[延時(shí)時(shí)間(秒)]是你想要的延時(shí)時(shí)間,[程序路徑]是你要啟動(dòng)的程序的完整路徑莫绣。
例如畴蒲,如果你想要延時(shí)10秒啟動(dòng)程序,程序的完整路徑是"C:\Program Files\Example\example.exe"对室,那么批處理文件的內(nèi)容應(yīng)該是:
@echo off
timeout /t 10
start “” “C:\Program Files\Example\example.exe”
2) 將文件保存為批處理文件(以.bat為擴(kuò)展名)模燥,例如"delayed_startup.bat"
3) 將批處理文件或其快捷方式移動(dòng)到Windows的啟動(dòng)文件夾中
啟動(dòng)文件夾的路徑通常是:
C:\Users[用戶名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
其中,[用戶名]是你的Windows用戶名掩宜。
或者通過在“運(yùn)行”中執(zhí)行命令“shell:startup”也可以打開“啟動(dòng)文件夾”
30蔫骂、EXCEL中提取單元格內(nèi)容內(nèi)多行文本的第一行
1) 換行符
CHAR(10)
2) 判斷是否有換行符
ISERROR(FIND(CHAR(10),A1))
假如沒有換行符,此判斷將返回true
3) 提取第一行內(nèi)容
LEFT(A1,FIND(CHAR(10),A1)-1)
4) 判斷是否有換行符牺汤,假如有則提取第一行內(nèi)容辽旋,否則獲取全部內(nèi)容
IF(ISERROR(FIND(CHAR(10),A1)),A1,LEFT(A1,FIND(CHAR(10),A1)-1))
31、RSLinx內(nèi)為PLC通信模塊添加ip地址
32、ipv4設(shè)為靜態(tài)地址补胚,系統(tǒng)卻使用自動(dòng)配置的ipv4地址
可能原因:
此ip地址已被路由器分配出去固该,導(dǎo)致不可用,此時(shí)需修改為不沖突的地址