1

MySQL Select Query から返された特定の結果を置き換える必要があることに気付きました。次のテーブルとデータがあります(例のために簡略化されています)

uid  |  duration |  range |     unique |    stamp
-----------------------------------------------------------------
23   |  d    |  43    |     1      |    1
24   |  d    |  65    |     0      |    2
25   |  d    |  76    |     0      |    3
26   |  d    |  33    |     0      |    4
27   |  d    |  44    |     1      |    5
28   |  d    |  43    |     1      |    6
29   |  d    |  67    |     0      |    7
30   |  d    |  88    |     0      |    8
31   |  d    |  63    |     0      |    9

列は、stamp置換を行いたいものです。単純なテキストの置換ではなく、列に対して何らかのユーザー定義関数を実行して動的に置換できるかどうか疑問に思っていました。

たとえば、スタンプ列に返されたデータが 1 の場合は今日のタイムスタンプに置き換え、2 の場合は昨日のタイムスタンプ、3 の場合は昨日のタイムスタンプなどに置き換えます。

だから私の質問は、REPLACE値を処理し、それを置き換えるものを返す関数を指すことは可能ですか? そうでない場合は、これを達成する別の方法があります。

もちろん、返されたデータを PHP で後処理して変更を加えることができますが、何百万ものレコードが返されるため、読み込み時間が大幅に長くなります。

物事を少し明確にするために編集: SELECT クエリから返されたデータのスタンプ列を置き換えたいのですが、データをどこにも保存していないか、テーブル内のデータを置き換えていません。テーブルは変更されません。

ありがとう

4

3 に答える 3

2

絶対に可能:

UPDATE stamps
SET stamp = CURRENT_DATE - INTERVAL stamp - 1 DAY;

ここでフィドル。のスタンプの場合、スタンプの値を 1 減らして「マイナス 0 日」にする必要があることに注意してください1。を削除すると値に- 1昨日の日付が格納されることになります。stamp1

更新して、それを行うことについての質問に答えてくださいSELECT

SELECT CURRENT_DATE - INTERVAL stamp - 1 DAY
FROM stamps;

ここでフィドルを更新しました

于 2013-09-04T13:25:32.887 に答える
0

mysql の case ステートメントを使用できます

CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE

于 2013-09-04T13:24:26.373 に答える
0

結果を取得するだけの場合は、次を使用します。

SELECT CURDATE() - INTERVAL stamp -1 DAY FROM myTable
于 2013-09-04T13:25:45.533 に答える