簡體   English   中英

SQL大於子字符串

[英]SQL greater than substring

我有一個像這樣的SQL字段:

          ROOMS
=======================
bedrooms 2, bathrooms 2
bedrooms 3, bathrooms 2
bedrooms 6, bathrooms 1
bedrooms 1, bathrooms 4
bedrooms 1, bathrooms 2
bedrooms 4, bathrooms 4
bedrooms 1, bathrooms 3

如何形成單個SELECT語句來檢索卧室大於3的所有行?

此外,是否可以對此語句進行變異以檢索浴室大於3的所有行?

編輯

是的,是的,是的,可怕的數據系統。 :)

但從概念上講,有沒有辦法實現這一目標?

首先,我希望我不必指出這是一個多么糟糕,可怕的數據模型。

除此之外:

您只需要解析字段中的數據。 如果格式總是如上所述,您可能會使用substr ,例如:

SELECT * FROM table WHERE SUBSTR(BEDROOMS, 9,1)>3

(不保證數字:-))。

如果格式更靈活(例如,超過9個床位/浴室,首先給出浴室),您可能需要使用正則表達式進行解析。 大多數DBMS支持正則表達式,參見http://www.postgresql.org/docs/8.3/static/functions-matching.html

好吧,這就是為什么規范化是“發明的”,這樣你就不會得到像這樣糟糕的模式。 無論如何設計這個應該是......,無論如何。

我建議首先修復架構,然后這不會是一個問題,但要回答你的問題,你可以用“”替換所有“卧室”的出現,然后用“,”更換所有“浴室”說“ - ”,然后從那里形成一個查詢。

SELECT CONVERT(int, SUBSTRING(ButcheredColumn, CHARINDEX('-', ButcheredColumn))) AS NumBedrooms
, CONVERT(int, RIGHT(ButcheredColumn, CHARINDEX('-', ButcheredColumn))) AS NumBathrooms
FROM (
    SELECT REPLACE(REPLACE(ROOMS, 'bedrooms ',''), ', bathrooms ', '-') AS ButcheredColumn
    FROM CrappyDesignedTable1
) AS ButhceredTable

可能必須使用charindex一點來獲得正確的列,然后您可以使用此表作為子查詢並從中進行選擇。 我建議如果你不知道子查詢是什么,把你所有的工具放下來,然后在你的iPhone上玩憤怒的冒險。

暫無
暫無

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

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