如何在 SQL 中将值显示为 Y 或 N?
Posted
技术标签:
【中文标题】如何在 SQL 中将值显示为 Y 或 N?【英文标题】:How to display values as Y or N in SQL? 【发布时间】:2018-06-05 11:32:57 【问题描述】:我正在为中美洲的一家小型诊所创建一个数据库。该数据库有一个“访问”表,其中包含一系列是或否问题的数十个字段。
我知道在 SQL 中存储二进制值的最佳(最简单、最有效)方法是使用位数据类型 (x),但是我知道我也可以将 char(1) 数据类型用于“Y”或"N" 以使用更多空间为代价 (x)。
最初,我计划使用 bit 数据类型并将 1 存储为是,将 0 存储为否,但是我不知道如何在 php.ini 中将此显示为 Y 或 N。
目前,在一个单独的表中,我将 HIV 和糖尿病的值存储为 0 或 1,并且我在 SQL 选择语句中对两个单独的表执行内部联接,分别为 1 到 Y 和 0 到 N。
如果我要继续使用这种技术,那么我将需要制作数十张将 1 与 Y 以及 0 与 N 相关联的表。这似乎效率低下且非常多余。
有没有办法将一个表的多个列关联到一个关联 1 到 Y 和 0 到 N 的表?我正在使用 PHPmyadmin。
【问题讨论】:
是的,您可以从尽可能多的表中获得尽可能多的列,以引用同一个“查找”表;不需要特殊的语法。也就是说,您也可以只使用简单的表达式来选择此类字段,而不是彻底解决二值查找表的麻烦。SELECT CASE someField WHEN 1 THEN 'Y' ELSE 'N' END AS someFieldYN
另外,我可能不会打扰 BIT 类型。 TINYINT 可能不会占用明显更多的空间(如果有的话),并且可能会更容易使用。
echo $row['field'] ? 'Y' : 'N'
…
如果您要创建Y
和N
值的输出列,请不要。很难阅读。更好的是“是”和“否”——因为它们的宽度不同。或“是”和空白,或空白和“否”。或者...
【参考方案1】:
说实话,您不必为小型诊所争先恐后地节省表空间。以最容易维护的方式编写程序。
使用位而不是更简单的列类型可以节省数万字节。 (=无法衡量)。
如果您使用任何类型的 int(tinyint?),您可以在查询中翻译成文本。
SELECT IF(column=1,'Sí','No') column
例如。
【讨论】:
【参考方案2】:我会使用布尔数据类型来保存状态(如果您不想更改,也可以使用 1 和 0)并使用 php 转换真或假值以显示真 Y 和假N 当用户想要看到这样的结果时:
<?php
$stateFromDB; //Get it from db
if($stateFromDB == true)
echo "Y";
else
echo "N";
?>
【讨论】:
以上是关于如何在 SQL 中将值显示为 Y 或 N?的主要内容,如果未能解决你的问题,请参考以下文章
您如何修改默认值以接受 Y 或 N 而不仅仅是 SQL 中的 Y