heavenm 发表于 2018-9-4 17:48:50

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这种关键字不需要添加引号怎么办?

heavenm 发表于 2018-9-4 17:56:54

{:face (368):}突然感觉这个功能好像没太大必要

heavenm 发表于 2018-9-4 18:08:04

{:face (258):}不过查询表多的时候感觉还是很有必要的,好麻烦!
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/04 18:07 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = '"WHERE"'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '"WHERE"', 'WHERE')
MsgBox(0, '替换结果', $sSRERe)

最简单的方法就是直接替换好了!

kk_lee69 发表于 2018-9-4 22:00:45

heavenm 发表于 2018-9-4 18:08
不过查询表多的时候感觉还是很有必要的,好麻烦!

最简单的方法就是直接替换好了!

老實說 完全看不懂這個要幹嘛??

SQLLITE 的語法 不就是SQL語法為何要替換引號??

你說的是 單引號嗎??

SELECT * FROM DB Where NAME='LEE'

查找 姓名 是 LEE 的人
這樣完全不需要替換引號阿???

顽固不化 发表于 2018-9-4 22:17:58

研究的太深了,我只能看着大神

heavenm 发表于 2018-9-4 23:25:00

本帖最后由 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

heavenm 发表于 2018-9-4 23:33:12

http://autoitx.com/forum.php?mod=viewthread&tid=59565&page=1&extra=#pid704309
我把这个SQLITE简化版发出来哈,太乱了,自己将就用

kk_lee69 发表于 2018-9-5 00:51:01

heavenm 发表于 2018-9-4 23:25
因为表太多了

SELECT "A","B","C"................................................................ ...

不是 我理解一下~~~

SELECT "A","B","C"........................................................................"Z" FROM "default" WHERE "productBrand" = "4"

"A"這個是 雙引號嗎??為什麼 SQL資料庫與法要使用雙引號??

heavenm 发表于 2018-9-5 15:51:42

kk_lee69 发表于 2018-9-5 00:51
不是 我理解一下~~~

SELECT "A","B","C".......................................................... ...
因为有些时候如果是数字的话,好像必须引号起来,所以我就不管那么多,除了关键语句以外,给它全部加上引号了!{:face (197):}

heavenm 发表于 2018-9-5 15:53:06

{:face (460):}怪我没好好认真学习数据库,就简单粗暴的全部加引号了!

kk_lee69 发表于 2018-9-5 16:13:56

heavenm 发表于 2018-9-5 15:51
因为有些时候如果是数字的话,好像必须引号起来,所以我就不管那么多,除了关键语句以外,给它全部加上引号了 ...

SQL 語法 應該是 數字 不用加任何東西   文字前後加上單引號

但是我看你的引號是 雙引號吧   所以我不太能理解用途.....

heavenm 发表于 2018-9-5 16:22:21

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"

heavenm 发表于 2018-9-5 16:38:11

或者有没有什么办法
用正则实现StringSplit这个功能,把空白的字符也识别出来

heavenm 发表于 2018-9-5 16:40:15

本帖最后由 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")

heavenm 发表于 2018-9-5 17:04:41

### 友情提示:本脚本由 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
查看完整版本: sqlite语法,正则替换引号