【问题标题】:SQL Like function Broken? or Limited?SQL Like 函数坏了?还是有限的?
【发布时间】:2015-08-13 17:34:44
【问题描述】:

我正在尝试使用LIKE 函数来获取具有相似名称的数据。 看起来一切都很好,但是当我返回超过 ~20 行数据时,我得到的数据丢失了一些值。

我有一个非常基本的查询。我只想要从 Lab 开始的数据,理想情况下是一整天,或者至少 12 小时。下面的代码遗漏了一些数据,我无法辨别它选择跳过的模式。

SELECT History.TagName, DateTime, Value  FROM History 
WHERE History.TagName like ('Lab%') 
AND Quality = 0
AND wwRetrievalMode = 'Full' 
AND DateTime >= '20150811 6:00'
AND DateTime <= '20150811 18:00'

为了让您了解我正在提取的数据,我有 Lab.Raw.NTU、Lab.Raw.Alk、Lab.Sett.NTU 等。大多数数据的值应为上午 6 点/下午、上午 10 点/pm 和 2am/pm。有的多,少的少,不重要。当我将查询更改为更具体(即只有 1 小时窗口或 LIKE “Lab.Raw.NTU”)时,我得到了所有数据。目前,这会输出所有标签的数据,我会同时获得早上 6 点的数据和下午 6 点的数据,但是某些值会丢失,例如下午 6 点的 Lab.Raw.NTU。如果我更改前一天或夜班的窗口,似乎还有其他数据丢失,所以我认为它不必与数据本身有关。 LIKE 函数发生了一些奇怪的事情,但我不知道是什么。
除了喜欢之外,还有其他方法可以获得我想要的标记名吗?例如标记名 > Lab 和标记名

请帮忙。

【问题讨论】:

  • 您确定它缺少数据还是只是以与您预期不同的顺序返回结果?也许您的界面限制了返回的行数。
  • 如果您想包含时间为上午 6 点至下午 6 点的 18:00:30 的记录。数据,那么您将需要使用AND DateTime &lt; '20150811 18:01
  • 您是从 SQL Management Studio 运行该脚本还是检查您的最终应用程序的结果?
  • 是的,我的数据正好是下午 6 点,但我的原始查询是从午夜到午夜,我仍然遇到问题。我在 SQL Management Studio 中得到了相同的结果。我确实觉得这可能与返回的行有关,但是 24 小时查询返回 200 行,只是缺少一些项目。我会说这是我没有制作的专有历史数据库。他们有没有可能弄乱了一些东西来歪曲结果?
  • 你能举几个更详细的例子吗?比如向我们展示一个返回所有内容的查询,然后向我们展示排除某些行的扩展查询。除非您有语法错误,否则我看不出为什么会发生此问题。

标签: sql sql-like wonderware


【解决方案1】:

您似乎正确地使用了Like 运算符;这可能是一个红鲱鱼。检查DateTime 字段的数据类型。如果它是基于字符的,例如 varchar,则您正在进行字符串比较而不是日期比较,这可能会导致意外结果。尝试进行显式转换以确保将它们作为日期进行比较:

DateTime >= convert(datetime, '20150811 6:00')

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2022-09-30
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多