【问题标题】:Query Not working with Table in SQL server 2008查询不使用 SQL Server 2008 中的表
【发布时间】:2012-01-11 10:25:35
【问题描述】:

我有一个 java 应用程序,它将所有数据从一个 sybase 数据库表复制到另一个数据库(sql server 2008)。这工作正常,我正在使用 jTDS。现在我想从包含值“FLM”和“NONFLM”的表列中选择数据。我执行了查询

select * from table where colName = 'FLM'

在 sql server 中但没有返回结果。我修剪了此列,但无法获得结果。该表的列具有“FLM”值。与其他列相同的是,我在将整数值复制到字符串列的唯一列中的任何一个中都找不到空格。我将所有列作为字符串。

【问题讨论】:

  • 使用colName LIKE '%FLM%'会得到什么?
  • @Ocaso Protal 它在使用 like 时有效。
  • 好的,下一次尝试:SELECT colName, LEN(colName) FROM table WHERE colName LIKE '%FLM%'你会得到什么
  • @OcasoProtal 它为 FLM 的 SELECT colName, LEN(colName) FROM table WHERE colName LIKE 'FLM%' 返回 4
  • 还有一个 ;): SELECT colName, LEN(colName), ASCII(substring(colName,4,1)) FROM table WHERE colName LIKE 'FLM%' ASCII 可能会得到 13,因此每个值都会添加一个 CR。

标签: java sql-server database jdbc sybase


【解决方案1】:

从 cmets 中可以看出,您的专栏中有一个字符过多。因此,要么调整您的 java 导入(String#trim() ?)或更新表中的值:

UPDATE table SET colName = SUB(colName,0,LEN(colName))   
WHERE ASCII(SUBSTRING(colName,LEN(colName),1)) = 0

小心!这是未经测试的,所以在使用之前将其包装在事务中。

【讨论】:

    【解决方案2】:
    select * from table where colName IN ('FLM', 'NONFLM')
    

    【讨论】:

    • 这给出了 SSMS 的空结果。实际上我只想选择 FLM。数据在传输过程中发生了问题。
    【解决方案3】:

    问题可能出在数据库上。

    试试:

    use databasename
    go
    select * from table where colName = 'FLM'
    go
    

    或:

    select * from databasename..table where colName = 'FLM'
    

    另外,如果您应该使用IN 来查找多个:

    select * from databasename..table where colName IN ('FLM', 'NONFLM')
    

    【讨论】:

      【解决方案4】:

      这个查询是正确的,

      可能是你没有选择正确的数据库...

      运行这个结果是什么

      从表中选择 *

      【讨论】:

      • 查询不正确,因为 OP 正在寻找 colName 为 FLM 或 NONFLM 的结果
      猜你喜欢
      • 2011-12-18
      • 2014-04-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2011-11-20
      • 1970-01-01
      • 2013-09-01
      相关资源
      最近更新 更多