sqlite语法,正则替换引号
本帖最后由 heavenm 于 2018-9-4 18:05 编辑Func _SQLiteEx_string($__str)
If StringRegExp($__str, '\^') Then
$__str = StringRegExpReplace($__str, '\^', '') ;处理引号
Else
$__str = StringRegExpReplace($__str, '(?m)[' & "'" & '"]*([^,=\v\s' & "'" & '"]+)[' & "'" & '"]*', '"\1"') ;(?m)['"]*([^,=\v'"]+)['"]*处理引号
EndIf
Return $__str
EndFunc ;==>_SQLiteEx_string
SQLITE语句
SELECT "productSkuKey","productSkuName" FROM "default"<span style="white-space:pre"> </span> WHERE "productBrand" = "4"
有时候为了懒会全部不写引号,但是会出错
SELECT productSkuKey,productSkuName FROM defaultWHERE productBrand = 4正则替换语句:(?im)['"]*([^,=\v\s'"]+)['"]* 替换成"\1"
现在有个问题,WHERE这种关键字不需要添加引号怎么办?
{:face (368):}突然感觉这个功能好像没太大必要 {:face (258):}不过查询表多的时候感觉还是很有必要的,好麻烦!
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/04 18:07 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = '"WHERE"'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '"WHERE"', 'WHERE')
MsgBox(0, '替换结果', $sSRERe)
最简单的方法就是直接替换好了! heavenm 发表于 2018-9-4 18:08
不过查询表多的时候感觉还是很有必要的,好麻烦!
最简单的方法就是直接替换好了!
老實說 完全看不懂這個要幹嘛??
SQLLITE 的語法 不就是SQL語法為何要替換引號??
你說的是 單引號嗎??
SELECT * FROM DB Where NAME='LEE'
查找 姓名 是 LEE 的人
這樣完全不需要替換引號阿??? 研究的太深了,我只能看着大神
本帖最后由 heavenm 于 2018-9-4 23:28 编辑
kk_lee69 发表于 2018-9-4 22:00
老實說 完全看不懂這個要幹嘛??
SQLLITE 的語法 不就是SQL語法為何要替換引號??
因为表太多了
SELECT "A","B","C"........................................................................"Z" FROM "default" WHERE "productBrand" = "4"
有时候要加太多引号了,我简化了SQLITE查询,这样子查询比较方便!
_SQLiteEx_Query($proxyDB, 'default.productSkuKey,productSkuName,C,D,E', 'WHERE productBrand = 4')Func _SQLiteEx_Query($_hdb, $_table = Null, $__expr = Null)
Local $_sQuery, $_sResult, $_sTemp
$__table = StringRegExp($_table, '[^\.]+', 3)
Switch UBound($__table)
Case 1
$_SQLiteCommand = 'SELECT * FROM ' & _SQLiteEx_string($__table)
Case 2
$_SQLiteCommand = 'SELECT ' & _SQLiteEx_string($__table) & ' FROM ' & _SQLiteEx_string($__table)
;~ $_columns = StringSplit(StringRegExpReplace($__table, '"|' & "'", ''), ',') ;栏目
;~ ReDim $_sResult[$_columns]
;~ For $_i = 1 To $_columns
;~ $_sResult[$_i - 1] = $_columns[$_i]
;~ Next
EndSwitch
$_SQLiteCommand = StringRegExpReplace($_SQLiteCommand, '"WHERE"', 'WHERE')
If $__expr <> Null Then $_SQLiteCommand &= ' ' & $__expr
ConsoleWrite($_SQLiteCommand & @CRLF)
_SQLite_Query($_hdb, $_SQLiteCommand, $_sQuery)
While _SQLite_FetchData($_sQuery, $_sTemp) = $SQLITE_OK
$__columns = UBound($_sTemp) ;按返回结果定义列数
If $__columns == 1 Then $__columns = 0
If $__columns <> UBound($_sResult, 2) Then ReDim $_sResult[$__columns] ;调整数组
_Array2D_Add($_sResult, $_sTemp)
WEnd
$__ArrayRows = UBound($_sResult) ;返回数组行
If $__ArrayRows == 1 Then Return SetError(1) ;数组默认为1
If $__columns > 1 Then
$_sResult = $__ArrayRows - 1
Else
$_sResult = $__ArrayRows - 1
EndIf
Return $_sResult
EndFunc ;==>_SQLiteEx_Query
http://autoitx.com/forum.php?mod=viewthread&tid=59565&page=1&extra=#pid704309
我把这个SQLITE简化版发出来哈,太乱了,自己将就用 heavenm 发表于 2018-9-4 23:25
因为表太多了
SELECT "A","B","C"................................................................ ...
不是 我理解一下~~~
SELECT "A","B","C"........................................................................"Z" FROM "default" WHERE "productBrand" = "4"
"A"這個是 雙引號嗎??為什麼 SQL資料庫與法要使用雙引號?? kk_lee69 发表于 2018-9-5 00:51
不是 我理解一下~~~
SELECT "A","B","C".......................................................... ...
因为有些时候如果是数字的话,好像必须引号起来,所以我就不管那么多,除了关键语句以外,给它全部加上引号了!{:face (197):} {:face (460):}怪我没好好认真学习数据库,就简单粗暴的全部加引号了! heavenm 发表于 2018-9-5 15:51
因为有些时候如果是数字的话,好像必须引号起来,所以我就不管那么多,除了关键语句以外,给它全部加上引号了 ...
SQL 語法 應該是 數字 不用加任何東西 文字前後加上單引號
但是我看你的引號是 雙引號吧 所以我不太能理解用途..... 17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/05 16:21 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = '17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(?m)[' & "'" & '"]*([^,=\v' & "'" & '"]+)[' & "'" & '"]*', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))
(?m)['"]*([^,=\v'"]+)['"]*
这条正则还有个问题,空白应该也替换成双引号
"17953","R2001","4","true","2","","1","5a3381e33a32e4700f000165" 或者有没有什么办法
用正则实现StringSplit这个功能,把空白的字符也识别出来 本帖最后由 heavenm 于 2018-9-5 16:41 编辑
kk_lee69 发表于 2018-9-5 16:13
SQL 語法 應該是 數字 不用加任何東西 文字前後加上單引號
但是我看你的引號是 雙引號吧 所以我不 ...
不知道,我是用在SQLITE里面的
INSERT OR IGNORE INTO 嘿嘿嘿 (id,name,brand,active,totalRecyleCount,alias,categoryId,image) VALUES (17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165)
比如这句在SQLITE里面,没有引号不能运行必须加上引号
INSERT OR IGNORE INTO 嘿嘿嘿 (id,name,brand,active,totalRecyleCount,alias,categoryId,image) VALUES ("17953","R2001","4","true","2","","1","5a3381e33a32e4700f000165")
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/05 17:02 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = '17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(.*?)(?:,|$)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))
后面会多一行出来,这个是为什么呢!感觉不合理啊
页:
[1]
2