Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用破折号(-)作为条件的值_Sql_Database_Ms Access - Fatal编程技术网

Sql 如何使用破折号(-)作为条件的值

Sql 如何使用破折号(-)作为条件的值,sql,database,ms-access,Sql,Database,Ms Access,我不知道这在MS Access中是否可行,但我想做的是在SQL语句和或逗号中检测破折号(-)和使用Between 我有一个名为“Books”的表,表中有字段:BookID、Title、Subject 现在,如何查询允许用户在文本框中输入值的Books表,如: 1 or 1-5 or 1,3,4. 如果值为1,则sql语句应为: SELECT * FROM Books WHERE BookID = 1 SELECT * FROM Books WHERE BookID BETWEEN 1 And

我不知道这在MS Access中是否可行,但我想做的是在SQL语句和或逗号中检测破折号(-)和使用Between

我有一个名为“Books”的表,表中有字段:BookID、Title、Subject

现在,如何查询允许用户在文本框中输入值的Books表,如:

1 or 1-5 or 1,3,4.
如果值为1,则sql语句应为:

SELECT * FROM Books WHERE BookID = 1
SELECT * FROM Books WHERE BookID BETWEEN 1 And 5
SELECT * FROM Books WHERE BookID IN (1,3,4)
如果值为1-5,则sql语句应为:

SELECT * FROM Books WHERE BookID = 1
SELECT * FROM Books WHERE BookID BETWEEN 1 And 5
SELECT * FROM Books WHERE BookID IN (1,3,4)
如果值为1,3,4,则sql语句应为:

SELECT * FROM Books WHERE BookID = 1
SELECT * FROM Books WHERE BookID BETWEEN 1 And 5
SELECT * FROM Books WHERE BookID IN (1,3,4)
从Books.BookID>1和Books.BookID<5的图书中选择图书.标题;

从我已有的东西上剪下

s = "SELECT * FROM Books WHERE BookID" & parseSarg("11,22,33")
使用

Public Function parseSarg(str As String) As String
    Dim re As Object: Set re = CreateObject("vbscript.regexp")
    re.Global = True
    Select Case True
        '//is number
        Case reTest(re, "^\d+$", str):          parseSarg = " = " & str
        '//is number-number
        Case reTest(re, "^\d+-\d+$", str):      parseSarg = " BETWEEN " & Replace$(str, "-", " AND ")
        '//is number,number[,number]
        Case reTest(re, "^\d+(?:,\d+)*$", str): parseSarg = " IN (" & str & ")"
        '//is >number
        Case reTest(re, "^>\s*\d+$", str):      parseSarg = " >" & Mid$(str, 2)
        Case Else
            parseSarg = " = 0 AND 1=0"
    End Select
End Function

Function reTest(re As Object, pattern As String, value As String) As Boolean
    re.pattern = pattern
    reTest = re.Test(value)
End Function

它来自access中的文本框,因此VBA钩子应该是okhi,值必须来自文本框。只有一个文本框。