首页 > 解决方案 > 有什么方法可以将我的所有表格日期转换为 varchar 而不是使用 ALTER?

问题描述

我有这样的问题......我被告知要搜索一些无效的数据库,因为印度尼西亚语中的员工索引号或(NIP)与工人的出生日期不同例如:我的出生日期是 1996-12-23 所以员工索引号应为 19961223015 最后 3 位是工人序列号

我已经使用了名为“LIKE”的语法,所以当我使用它时,它几乎就像“NIP not like TGLLHR”(生日)当然输出都是因为 VARCHAR 无法与 DATE 相比

select m.NIP, m.NAMA, DATE_FORMAT(m.TGLLHR, '%Y%m%d') as TGLLHR, DATE_FORMAT(m.TMTCAPEG, '%Y%m%d') as TMTCAPEG, m.KDJENKEL, m.KDSTAPEG, s.NMSTAPEG, t.KDSATKER, t.NMSATKER
from mstpegawai m join
     stapeg_tbl s
     on m.KDSTAPEG=s.KDSTAPEG join
     satker_tbl t
     on m.KDSATKER=t.KDSATKER
where m.KDSTAPEG < 10 AND
      (NIP not like TGLLHR OR  NIP not like TMTCAPEG OR  NIP not like KDJENKEL)
ORDER BY m.NAMA

我希望输出会像这样 NIP 19931215013 但生日是 1993-11-15 所以这意味着数据无效,因为 NIP 的第一个数字与生日不同

标签: mysqlsql

解决方案


使用日期掩码将日期转换为字符串,以确保完全按照您的预期进行转换。

假设这TGLLHR是一DATE列,请按以下方式进行比较:

NIP not like TO_CHAR(TGLLHR, 'YYYYMMDD') || '%'

如果您只是将该DATE字段转换为VARCHAR2,那么您就是让 Oracle 使用您的NLS_DATE设置来执行隐式日期转换,这可能是您不想要的。使用显式日期掩码。


推荐阅读