MySQL条件选择替换查询

时间:2013-09-04 13:16:59

标签: php mysql

我发现自己需要从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查询返回的数据中的戳记列,我不是将数据存储在任何地方,也不是替换表中的数据。该表将保持不变。

由于

3 个答案:

答案 0 :(得分:2)

绝对可能:

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

<强> Fiddle here 即可。请注意,对于1的戳记,您必须将戳记值减1到“减去0天”。如果您移除- 1,则最终会存储昨天的stamp 1值的日期。

更新以回答您在SELECT上执行此操作的问题:

SELECT CURRENT_DATE - INTERVAL stamp - 1 DAY
FROM stamps;

<强> Updated Fiddle here

答案 1 :(得分:0)

您可以使用mysql的case语句

CASE case_value     何时when_value THEN statement_list     [WHEN when_value THEN statement_list] ......     [ELSE statement_list] 结束案例

答案 2 :(得分:0)

如果您只是想检索结果,请使用以下命令:

SELECT CURDATE() - INTERVAL stamp -1 DAY FROM myTable