【问题标题】:How to get text from a number in a select query [duplicate]如何从选择查询中的数字中获取文本[重复]
【发布时间】:2016-05-19 21:24:06
【问题描述】:

我有MYSQL DB,它有一个ID INT,但是这个标识符在系统中有一个含义,我想得到含义而不是数字,例如这样的。

select ID from payments;
if(ID==0)
returns "No payment made"
else if(ID==1)
returns "Payment made accordingly"

有可能这样做吗?还是我应该以编程方式进行?在系统中?, 我在 C# 中使用 datagridview,这就是为什么我想将结果作为文本而不是查询中的数字来获取

【问题讨论】:

  • 这里的最佳做法是在 UI 中保留“显示”。然后,如果您愿意,您可以进行本地化。数据和后端应该只使用该值。
  • 谢谢@EhsanSajjad,不知道如何在论坛中实际搜索这个,非常感谢你的帖子:)

标签: c# mysql


【解决方案1】:

您可以使用CASE - WHEN 或IF 流控制运算符。

试试下面的SQL,

select case ID when 0 then 'No payment made' when 1 then 'Payment made accordingly' end as ID
from payments

【讨论】:

  • 谢谢你,因为某种原因答案在 cmets XD ^^
【解决方案2】:

您也可以像这样使用查询

Select IF(ID=0,"No payment made","Payment made accordingly") as ID From payments;

【讨论】:

    【解决方案3】:

    最好的做法是

    1. 要么有一个查找表,以查找支付表中可能的 id 值,描述每个 id 值的含义,并通过连接获取此描述:

    select p.id, pd.description from payments p inner join paym_description pd on p.id=p.payment_id

    1. 或者在客户端应用程序的资源文件中提供这些描述,客户端应用程序可以在其中查找值本身的含义。

    原因是,如果您需要更改描述或添加新描述,则需要编辑代码,而不是配置表或资源文件(如果您在代码中包含描述)。更不用说,如果你有一个很大的列表,那将是一个很长的案例陈述。

    【讨论】:

    • 谢谢你,因为某种原因答案在 cmets XD ^^
    【解决方案4】:

    试试:

    select case 1 when 0 then "No payment made" when 1 then "Payment made accordingly" end from payments
    

    【讨论】:

    • 谢谢你,答案在 cmets XD ^^
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多