如何使用连接字段查询MSSQL数据库


How to query a MSSQL database using a concatenated field

有没有人能给我解决这个问题的建议?我正在运行PHP 5.3与MSSQL。只是为了解释发生了什么以及我需要能够做什么…

用户从主页上的表中选择特定的运行(行)。表中的列是:

  • <
  • 部门/gh>
  • 起始英里/码(格式为565.1211,即英里565和码1211)[这一列是由我的数据库中的两个独立列"英里"answers"码"串联而成]
  • 结束英里/院子
  • 开始lat
  • 开始长
  • 结束lat
  • 结束长
  • 总数
  • 可用报告(是或否)

用户可以通过单击report=yes的报表列中的单元格来选择一行。这些数据被贴在下一页上。下一页允许用户更改开始和结束英里/码数据,以便他们可以看到该运行的特定部分。

例如,用户在主页上选择查看从起始英里/码565.1211到结束英里/码593.4321的数据。用户可以通过在两个文本框中输入来更改他们想要看到的部分。一个框是"开始英里/码",第二个框是"结束英里/码"。因此,用户可以在"起始英里/码"文本框中输入570.2345,在"结束英里/码"文本框中输入580.6543。我想要发生的是从用户输入的地方查询数据…

SELECT     id, CAST(mile AS varchar(6)) + '.' + CAST(yard AS varchar(6)) AS Mile, gps_lat, gps_long, rotten, split, broken, quality
FROM         table
WHERE mile/yard BETWEEN start mile ??? AND end mile ???
ORDER BY Mile

我的问题是,当用户输入英里/码(580.6543)的组合时,我该如何从数据库查询此信息?我假设我将不得不再次将数据拆分为英里和码(我该如何做到这一点)…如何检索信息?这将是简单的做只是搜索英里(例如哪里英里之间570和580),但我如何搜索码和英里在同一时间?

不幸的是,我将无法改变数据库结构,因为这是我必须与…如果有人能想出更好的方法来做我正在做的事情……我洗耳恭听!!

我知道这是一个很长的问题,所以任何不清楚的,请让我知道!

欢呼,尼尔

您不应该将这些英里/码数强制转换为varchars。你失去了将它们作为数字进行比较的能力,而这正是它们开始时的状态。

将用户的英里/码值转换为数字,然后与数据库中的数字进行比较。

你试图强迫苹果和葡萄是橙子,并将它们与梨和李子进行比较……可以说,只要把所有东西都做成菠萝就行了。

此外,通过进行强制转换+连接,您将失去在这些字段上添加索引的任何机会。如果你的表变"大"了,那么强制对每个查询进行全表扫描会降低性能。

正如Marc B所说,我试图强迫苹果和葡萄成为橙子,并将它们与梨和李子进行比较……可以这么说,把所有东西都做成菠萝。我现在已经改变了我的脚本的结构。

欢呼,尼尔