一時的に無視するということは、狂気に対処し、そこから何らかの秩序を取り戻そうとすることが1/2できるということです。between 1 and 2
CREATE TABLE #Fractions (
Frac varchar(15)
);
INSERT #Fractions VALUES
('1 1/2'), ('1 1/4'), ('1"'), ('1/2'), ('1/4'), ('1/8'),
('2 1/2'), ('2"'), ('3"'), ('3/4'), ('3/8'), ('4"');
WITH Canonical AS (
SELECT
Frac,
F,
CharIndex(' ', F) S,
CharIndex('/', F) D
FROM
(SELECT Frac, Replace(Frac, '"', '') F FROM #Fractions) F
WHERE
F NOT LIKE '%[^0-9 /]%'
), Parts AS (
SELECT
Frac,
Convert(int, Left(F, CASE WHEN D = 0 THEN Len(F) ELSE S END)) W,
Convert(int, CASE WHEN D > 0 THEN Substring(F, S + 1, D - S - 1) ELSE '' END) N,
Convert(int, CASE WHEN D > 0 THEN Substring(F, D + 1, 2147483647) ELSE '1' END) D
FROM Canonical
)
SELECT
Frac,
W + N * 1.0 / D Calc
FROM Parts
ORDER BY Calc;
DROP TABLE #Fractions;
しかし、これはお勧めしません。私のクエリをベースとして使用して正しい値を取得し、10 進数値の使用に切り替えます。
NOT LIKE の代わりに LIKE を使用して上記のパターン マッチを使用して、このコードで説明されていない文字をデータから検索する必要があることにも注意してください。次に、それらを削除するか、何らかの方法で説明します。
あなたの言ったことが真実であり、それ1/2が 2 つのことを意味し、それらの違いを見分けることができれば、それについて何かをすることができます。範囲を 2 列に格納します。それらが同じ場合、範囲はありません。
この 2 つの意味の違いがわからない場合は、単に頭がおかしくなっているだけで、仕事を辞めてアラスカで犬ぞりのレースに出かけたほうがよいでしょう。