Sql 无法在oracle中使用中间值

Sql 无法在oracle中使用中间值,sql,oracle,Sql,Oracle,我无法理解:在>=和之间,您似乎在顶部查询中使用了小写的“p”,在第二个查询中使用了大写的“p”。这是故意的吗?您似乎在顶部查询中使用了小写字母“p”,在第二个查询中使用了大写字母“p”。这是故意的吗 SELECT * FROM names WHERE name BETWEEN 'Ankit' AND 'P' 还应该返回所有三行-我刚才用您的示例验证了它是这样做的。你确定你做的测试正确吗?可能您在其他会话中插入了数据,但没有提交其他行 还应该返回所有三行-我刚才用您的示例验证了它是这样

我无法理解:在>=和之间,您似乎在顶部查询中使用了小写的“p”,在第二个查询中使用了大写的“p”。这是故意的吗?

您似乎在顶部查询中使用了小写字母“p”,在第二个查询中使用了大写字母“p”。这是故意的吗

SELECT *  
FROM names  
WHERE name BETWEEN 'Ankit' AND 'P'
还应该返回所有三行-我刚才用您的示例验证了它是这样做的。你确定你做的测试正确吗?可能您在其他会话中插入了数据,但没有提交其他行


还应该返回所有三行-我刚才用您的示例验证了它是这样做的。你确定你做的测试正确吗?可能您在其他会话中插入了数据,但没有提交其他行?

我很确定这与您的语法无关,与数据库设置无关。我已经重新创建了您的测试场景,与其他人一样,两个查询返回您期望的结果都没有问题。您是否检查了前面提到的NLS_会话_参数?

我确信这与您的语法无关,与您的数据库设置有关。我已经重新创建了您的测试场景,与其他人一样,两个查询返回您期望的结果都没有问题。您是否检查了前面提到的NLS_会话_参数?

SQL代码不区分大小写。 字符串值和字符串比较区分大小写

你自己看看:

SELECT CASE WHEN 'a' = 'A' THEN 'string comparison is case insensitive'
            WHEN 'a' <> 'A' THEN 'string comparison is case sensitive'
       END 
FROM dual;
当'a'='a'时选择大小写,然后选择'字符串比较不区分大小写'
当“a”为“a”时,则“字符串比较区分大小写”
结束
来自双重;

SQLcode不区分大小写。 字符串值和字符串比较区分大小写

你自己看看:

SELECT CASE WHEN 'a' = 'A' THEN 'string comparison is case insensitive'
            WHEN 'a' <> 'A' THEN 'string comparison is case sensitive'
       END 
FROM dual;
当'a'='a'时选择大小写,然后选择'字符串比较不区分大小写'
当“a”为“a”时,则“字符串比较区分大小写”
结束
来自双重;

Nut 100%确定,但由于它只有3行,您可以尝试:

SELECT *  
  FROM names  
 WHERE (name BETWEEN "Ankit" AND "P")
OR (name BETWEEN "ankit" AND "p")

Nut 100%确定,但因为只有3行,您可以尝试:

SELECT *  
  FROM names  
 WHERE (name BETWEEN "Ankit" AND "P")
OR (name BETWEEN "ankit" AND "p")

首先,Oracle VARCHAR2类型区分大小写

其次,检查名称开头是否没有空格,如下所示:

" Bob"
" Mac"
使用微调功能检查这是否导致故障:

SELECT *  
FROM names  
WHERE trim(name) BETWEEN 'Ankit' AND 'P'
如果这没有帮助,请检查您的数据库的语言和排序顺序是否正确

编辑:
由于上述建议无法解决您的问题,您可以尝试以下方法:

  • 也许您在字段中还有其他一些不可打印的字符。使用Oracle
    DUMP
    功能检查:

    SELECT DUMP(name), name FROM names
    
    你应该得到这样的东西:

    Typ=1 Len=3: 66,111,98   Bob
    ...
    
    验证
    Len
    的长度是否正确

  • 检查NLS参数,使其不会意外更改为不适用于数据库的参数:

    SELECT * FROM NLS_SESSION_PARAMETERS
    SELECT * FROM NLS_DATABASE_PARAMETERS
    SELECT * FROM NLS_INSTANCE_PARAMETERS
    
    检查这三个查询的结果,并验证排序、语言和字符集上的参数是否正确


  • 首先,Oracle VARCHAR2类型区分大小写

    其次,检查名称开头是否没有空格,如下所示:

    " Bob"
    " Mac"
    
    使用微调功能检查这是否导致故障:

    SELECT *  
    FROM names  
    WHERE trim(name) BETWEEN 'Ankit' AND 'P'
    
    如果这没有帮助,请检查您的数据库的语言和排序顺序是否正确

    编辑:
    由于上述建议无法解决您的问题,您可以尝试以下方法:

  • 也许您在字段中还有其他一些不可打印的字符。使用Oracle
    DUMP
    功能检查:

    SELECT DUMP(name), name FROM names
    
    你应该得到这样的东西:

    Typ=1 Len=3: 66,111,98   Bob
    ...
    
    验证
    Len
    的长度是否正确

  • 检查NLS参数,使其不会意外更改为不适用于数据库的参数:

    SELECT * FROM NLS_SESSION_PARAMETERS
    SELECT * FROM NLS_DATABASE_PARAMETERS
    SELECT * FROM NLS_INSTANCE_PARAMETERS
    
    检查这三个查询的结果,并验证排序、语言和字符集上的参数是否正确


  • 某些NLS设置可能会产生这种效果。很有意思的是可以看到以下结果:select*from NLS_SESSION_PARAMETERS,其中parameter in('NLS_LANGUAGE','NLS_SORT','NLS_COMP');某些NLS设置可能会产生这种效果。很有意思的是可以看到以下结果:select*from NLS_SESSION_PARAMETERS,其中parameter in('NLS_LANGUAGE','NLS_SORT','NLS_COMP');你在比较苹果和橙子——你在其中一个中使用了小写的p,在另一个中使用了大写的p。普通人SQL是不区分大小写的,每个人都知道……不,它不是。但这确实不会对您的查询产生任何影响——所有三个名称都“小于”p和p。似乎没有人(包括我)能复制你的问题;我建议您发布完整的create table、insert和select语句来重现问题。此外,您还可以回答Gary关于NLS设置的问题(除非神秘的“boss sql不区分大小写”应该是这个问题的答案?“common man”=/=“拜托,伙计”您有一个工作查询,为什么要将其更改为在两者之间使用?就我个人而言,我更喜欢原始语法而不是中间语法,因为人们经常混淆它是>=和<还是其他组合,因此您无法知道开发人员的实际意图(以及查询是否正确)。在我看来,明确地说出你想要的更好。你在比较苹果和橙子——你在一个地方使用小写的p,在另一个地方使用大写的p。普通人SQL不区分大小写每个人都知道……不,它不是。但这确实不会对您的查询产生任何影响——所有三个名称都“小于”p和p。似乎没有人(包括我)能复制你的问题;我建议您发布完整的create table、insert和select语句来重现问题。此外,您还可以回答Gary关于NLS设置的问题(除非神秘的“boss sql不区分大小写”应该是这个问题的答案?“common man”=/=“拜托,伙计”您有一个工作查询,为什么要将其更改为在两者之间使用?个人的