Mysql:如果记录中的字段为空,我希望存储过程返回 N/A 作为值

Posted

技术标签:

【中文标题】Mysql:如果记录中的字段为空,我希望存储过程返回 N/A 作为值【英文标题】:Mysql: If a field in a record is empty I want the stored procedure to return N/A as value 【发布时间】:2018-02-16 01:39:19 【问题描述】:

我在mysql 中有一个表,其中记录中的字段(默认值:无)没有任何值。

我正在使用存储过程从这个表中选择值,当这个字段没有值时,我应该得到值N/A

我尝试了以下代码,但我得到的字段没有值。

SELECT md.coding_id,
    md.patient_id,
    md.implant_date,
    (case 
        when md.device_and_implant_description = ''
            then 'N/A'
        when md.device_and_implant_description !=0
            then md.device_and_implant_description
     end) as device_and_implant_description
FROM medical_devices_mapping as md
WHERE md.patient_id = p_id

p_id 值由用户指定。

这是结果:

这是我的表的结构:

【问题讨论】:

device_and_implant_description 在选择中出现两次,但您的输出只显示一个? @P.Salmon 是的,这是错误的。我只想要案例选择。我将编辑我的问题。感谢您的评论。 【参考方案1】:

请使用 NUll 和 ""。

如果您只想在存储数据之前使用 NULL 或 '',请确保您存储的是 null 或空字符串,然后相应地使用条件。

【讨论】:

当我通过 phpmyadmin 插入数据时,此表在字段 device_and_implant_description 中,我什么都不写。 请分享表模式,这将明确,如果默认值为空,那么它将存储空。如果您仍然不指定任何内容,它将存储 NULL。所以你可以在你的 SQL 中使用 NULL。【参考方案2】:

使用REGEXP 条件而不是''

SELECT md.coding_id, md.patient_id, md.implant_date,
       CASE WHEN md.device_and_implant_description REGEXP '^[A-Za-z0-9]+$'
            THEN md.device_and_implant_description
            ELSE 'N/A'
       END AS device_and_implant_description,
       md.device_and_implant_description
FROM medical_devices_mapping md
WHERE md.patient_id = p_id

【讨论】:

感谢您的回复,但问题仍然存在。该值不为空。 因为默认值为无。你不能用NONE替换''吗(野人) @MarkBaijens 我通过NONE 尝试过,在 mysql 存储过程中不是可识别的值。 我得到两个记录 N/A 作为价值。所以 else 语句对两条记录都执行。【参考方案3】:

也许你应该颠倒你的逻辑

case when trim(md.device_and_implant_description) is not null then md.device_and_implant_description
else 'N/A'
end

【讨论】:

不幸的是仍然没有运气! 然后检查非打印字符,如换行符回车等。【参考方案4】:

我使用COALESCE()找到了解决方案。

建议的解决方案如下:

SELECT md.coding_id,
    md.patient_id,
    md.implant_date,
    (CASE when COALESCE(md.device_and_implant_description, '') !='' 
         then md.device_and_implant_description
        when COALESCE(md.device_and_implant_description, '') ='' 
         then 'N/A'
     end) as device_and_implant_description
FROM medical_devices_mapping as md
WHERE md.patient_id = p_id

【讨论】:

以上是关于Mysql:如果记录中的字段为空,我希望存储过程返回 N/A 作为值的主要内容,如果未能解决你的问题,请参考以下文章

如果字段的值为空,则在 MySQL 中插入新记录,同时在不同的字段中添加 ID+1

求一个统计月份mysql 存储过程

09MySQL—列属性

求教oracle存储过程的赋值和更新

mysql 存储过程

mysql存储过程group_concat为游标中的选择返回null