【问题标题】:Analyze a string and determine an SQL operator分析字符串并确定 SQL 运算符
【发布时间】:2013-09-30 19:58:46
【问题描述】:

我需要你的帮助。

我想编写一个函数来检测和确定要在 SQL 字符串中使用的运算符 (LIKE/=)

例子:

var input_string = "SELECT * from table WHERE [FIRSTNAME]"

var input_text = document.GetElementbyId('firstname').value

如果给定的 input_text 满足 4 种可能组合中的 1 种,则运算符值为“LIKE”,否则为等号 (=)

1.) At the start of the string:  %firstname

2.) somewhere in the string itself: first%name

3.) At the end of the string: firstname%

4.) at both ends of the string: %firstname%

例子:

var output_string = input_string + analyze(input_text) '+input_text+'

var output_string 示例:

SELECT * FROM TABLE WHERE [FIRSTNAME] LIKE '%firstname%'
SELECT * FROM TABLE WHERE [FIRSTNAME] LIKE '%first%name'
SELECT * FROM TABLE WHERE [FIRSTNAME] LIKE 'firstname%'
SELECT * FROM TABLE WHERE [FIRSTNAME] LIKE '%firstname%'

其他

SELECT * FROM TABLE WHERE [FIRSTNAME] = 'firstname'

【问题讨论】:

  • 你可以一直使用LIKE。执行SELECT * FROM table WHERE firstname LIKE 'John' 应该可以正常工作。
  • 有点跑题了,你为什么要在 JS 中构造 SQL 语句? (好奇)。
  • 我正在制作一个简单的 HTA 应用程序来从访问数据库中获取一些信息并将其显示给用户。

标签: javascript string


【解决方案1】:

你似乎想要

function analyze(compare) {
    if (compare.indexOf("%") > -1)
        return "LIKE";
    else
        return "=";
    // or shorter with a regex and conditional operator:
    return /%/.test(compare) ? "LIKE" : "=";
}
var output_string = input_string+" "+analyze(input_text)+"'"+input_text+"'";

但是,正如 cmets 中提到的 @RocketHazmat,您可以始终使用 LIKE,当字符串中没有百分号时,它会像 = 一样工作。

【讨论】:

  • 如果没有通配符,使用 = 会更快。 stackoverflow.com/questions/559506/…
  • 是吗?引用 paxdiablo,“在一个不错的 DBMS(例如 DB2 :-) 中,DB 引擎会识别出字符串中没有通配符,并隐式将其转换为 = 版本”。那是 2009 年。
  • ...您知道关于假设的那句话:)...但是无论如何,即使数据库不检查,速度差异也可以忽略不计。
【解决方案2】:

由于使用like 取决于%,您应该使用indexOf 方法简单地检查字符串中的% 字符。

例子:

function useLike(input_text)
{
  return input_text.indexOf('%')>-1;
}

【讨论】:

    【解决方案3】:

    无论如何,您应该只能使用LIKE

    SELECT * FROM table WHERE firstname LIKE 'John'
    

    是一个有效的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      相关资源
      最近更新 更多