0

データベース 2 型変数: text と decimal(20,2) があります (Web アプリケーションを作成していますが、これら 2 種類のデータをテキストと数値として限定して、演算子のベース化を容易にします)。数値データ型では、整数部分のみのすべての列がある場合があり、結果データの場合は「32324244.00」になります。この「.00」を削除したいと思います。

列のエントリ > '.00' かどうかをチェックするコードを書きました。

SELECT IF(COUNT(`code`)>0,1,0) 
FROM `table_1` 
WHERE  substring_index(`code`,'.',-1) >=1 
AND  substring_index(`code`,'.',-1) <= 99

レコードがある場合、コードは「1」を返し、そうでない場合は「0」を返します。

このコードを開発し、数値を変換して MySQL ですぐに実行したいと考えています。では、「substring_index ( code, '. ', 1) '

私はコードを持っています:

SELECT IF(
 (SELECT IF(COUNT(`kod`)>0,1,0) FROM `table_1` 
  WHERE  substring_index(`kod`,'.',-1) >=1 
  AND substring_index(`kod`,'.',-1) <= 99)='1',`kod`,substring_index(`kod`,'.',1)
) WHERE `table_1`

このコードは機能しません。PhpMyAdmin はエラーを返します:

#1064- SQL 構文にエラーがあります。table_1 1 行目の 'WHERE LIMIT 0, 30'付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

問題はどこですか?

私の英語でごめんなさい:-)

4

2 に答える 2

2

問題は、WHERE句を作成せず、そのようなテーブルから選択しなかったことです。

WHERE column = something 

代わりにこれを試してください:

select count(kod) 
from
( 
   SELECT IF(COUNT(`kod`) > 0, 1, 0) 
   FROM `table_1` 
   WHERE substring_index(`kod`, '.', -1) >= 1  
     AND substring_index(`kod`, '.', -1) <= 99) = '1', 
         `kod`, 
         substring_index(`kod`, '.', 1)
) t  .

where句を含むものがある場合は、最後に追加できます。WHERE table_1 = .... またはそのようなもの。


編集:

SELECT IF((SELECT COUNT('kod') 
           FROM `table_1` 
           WHERE substring_index('kod', '.', -1) >= 1 
             AND substring_index('kod', '.', -1) <= 99 
             AND COUNT('kod')
         ) > '0', 
         'kod', 
         substring_index('kod', '.', 1)) as myvalue 
from `table_1`

EDIT2:

これを試して:

SELECT IF((SELECT COUNT(kod) 
           FROM `table_1` 
           WHERE substring_index(kod,'.',-1) >=1 
             AND substring_index(`kod`,'.',-1) <= 99 
           having COUNT(kod) > '0'),
          `kod`,
          substring_index(`kod`,'.',1)
         ) as myvalue 
from `table_1`

デモを見る

補足:という列があることを確認してくださいkod

于 2013-02-15T14:57:55.957 に答える
0
'name' 'price' 'currency' 'code (kod)'    
'WYCIERACZKI płaskie QAP PASSAT B5 FL 2001-2005' '35.00' 'PLN' '36977143.00'
'WYCIERACZKA EKOLOGICZNA 45x75 cm GUMA WYCIERACZKI' '75.00' 'PLN' '27429666.00'
'BOSCH opel WYCIERACZKI Vectra C Omega Signum RAV4' '66.99' 'PLN' '79166309.00'
'NAJLEPSZE Wycieraczki AERO PREMIUM 530 mm 35-71 cm' '10.90' 'PLN' 41394344.00'
'PŁASKIE WYCIERACZKI VW SHARAN GALAXY + TYŁ 3 szt.' '49.00' 'PLN' '53684409.00'
'SERWISOWE WYCIERACZKI PEUGEOT 307 od 10.2004' '38.99' 'PLN' '12379457.00'
'PŁASKIE WYCIERACZKI VALEO _______ HONDA CIVIC' '63.00 'PLN' 54651109.00'

わかりました。2番目と4番目の列はdecimal(20,2)です。4番目の列は「整数」だけです。showのように使用しました。

'WYCIERACZKI płaskie QAP PASSAT B5 FL 2001-2005' '35.00' 'PLN' '36977143'
'WYCIERACZKA EKOLOGICZNA 45x75 cm GUMA WYCIERACZKI' '75.00' 'PLN' '27429666'
'BOSCH opel WYCIERACZKI Vectra C Omega Signum RAV4' '66.99' 'PLN' '79166309'
'NAJLEPSZE Wycieraczki AERO PREMIUM 530 mm 35-71 cm' '10.90' 'PLN' 41394344'
'PŁASKIE WYCIERACZKI VW SHARAN GALAXY + TYŁ 3 szt.' '49.00' 'PLN' '53684409'
'SERWISOWE WYCIERACZKI PEUGEOT 307 od 10.2004' '38.99' 'PLN' '12379457'
'PŁASKIE WYCIERACZKI VALEO _______ HONDA CIVIC' '63.00 'PLN' 54651109'

価格は小数なので、これを普通に見せたい

于 2013-02-15T16:17:05.687 に答える