簡體   English   中英

如何使用連接字段查詢 MSSQL 數據庫

[英]How to query a MSSQL database using a concatenated field

有沒有人可以就解決我遇到的這個問題提供建議。 我正在使用 MSSQL 運行 PHP 5.3。 只是為了解釋會發生什么以及我需要做什么......

用戶從主頁上的表格中選擇特定的運行(行)。 表中的列是:

  • 日期
  • 分配
  • 開始英里/碼(格式為 565.1211,即 565 英里和 1211 碼)[此列由我的數據庫中兩個單獨的列“英里”和“碼”的串聯組成]
  • 終點英里/碼
  • 開始緯度
  • 開始長
  • 結束緯度
  • 結束很長
  • 全部的
  • 報告可用(是或否)

用戶可以通過單擊報告列中報告=是的單元格來 select 一行。 該數據發布到下一頁。 下一頁允許用戶更改開始和結束英里/碼數據,以便他們可以看到該運行的特定部分。

例如,用戶已在主頁上選擇查看從開始英里/碼 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)的組合時,我將如何從我的數據庫中查詢此信息? 我假設我將不得不再次將數據分成英里和碼(我該怎么做)......還有如何檢索信息? 只按英里搜索會很簡單(例如 WHERE mile BETWEEN 570 AND 580),但我如何同時按碼和英里搜索?

不幸的是,我將無法更改數據庫結構,因為這是我必須使用的……如果有人能想到更好的方法來做我正在做的事情……我全神貫注!

我知道這是一個很長的問題,所以有任何不清楚的地方,請告訴我!

干杯,

尼爾

您不應該將這些英里/碼數轉換為 varchars。 您失去了將它們作為數字進行比較的能力,而這正是它們最初的用途。

將用戶的英里/碼值轉換為數字,然后與數據庫中的這些數字進行比較。

你試圖強迫蘋果和葡萄成為橙子,並將它們與梨和李子進行比較......只是讓所有東西都成為菠蘿,可以這么說。

此外,通過進行強制轉換 + 連接,您將失去任何可能在這些字段上放置索引的機會。 如果您的表變得“大”,您將通過強制對每個查詢進行全表掃描來降低性能。

正如 Marc B 所說,我試圖強迫蘋果和葡萄成為橙子,並將它們與梨和李子進行比較......只是讓所有東西都變成菠蘿,可以這么說。 我現在改變了我的腳本的結構。

干杯,

尼爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM