Есть ли способ преобразовать всю мою таблицу даты в Varchar, а не с помощью ALTER? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть какая-то проблема, подобная этой ... мне сказали искать в недопустимой базе данных, потому что индекс сотрудника или (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 не совпадает с датой рождения

1 Ответ

0 голосов
/ 24 июня 2019

Преобразование даты в строку с использованием маски даты, чтобы гарантировать, что она преобразуется точно так, как вы ожидаете.

Предполагая, что TGLLHR является столбцом DATE, выполните сравнение следующим образом:

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

Если вы просто приведете поле DATE к VARCHAR2, то вы позволите Oracle использовать ваши настройки NLS_DATE для выполнения неявного преобразования даты, чего вы, вероятно, не хотите. Используйте явную маску даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...