Mysql 错误代码:1582调用本机函数“STR_to_DATE”时参数计数不正确

Mysql 错误代码:1582调用本机函数“STR_to_DATE”时参数计数不正确,mysql,mysql-error-1064,Mysql,Mysql Error 1064,我在mysql上有一个查询,我想得到日期值。 下面是sql语句 SELECT DISTINCT pegawai.NIP_BARU, pegawai.NAMA_PEGAWAI, pegawai.KODE_PANGKAT_TERAKHIR,pangkat_golongan.NAMA_PANGKAT, pangkat_golongan.GOLONGAN, pegawai.MASA_KERJA_THN_AKHIR, gaji.MASA_KERJA_GOLONGAN, gaji.NOMINAL_GAJI,

我在mysql上有一个查询,我想得到日期值。 下面是sql语句

SELECT DISTINCT pegawai.NIP_BARU, pegawai.NAMA_PEGAWAI, pegawai.KODE_PANGKAT_TERAKHIR,pangkat_golongan.NAMA_PANGKAT, pangkat_golongan.GOLONGAN, pegawai.MASA_KERJA_THN_AKHIR, gaji.MASA_KERJA_GOLONGAN, gaji.NOMINAL_GAJI,CASE PEGAWAI.TMT_GOL
WHEN (pangkat_golongan.JENIS_GOLONGAN = '2') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 0 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)> 12 THEN 2 + YEAR(pegawai.TMT_GOL)
WHEN (pangkat_golongan.JENIS_GOLONGAN = '1') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 1 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)> 12 THEN 2 + YEAR(pegawai.TMT_GOL)
WHEN (pangkat_golongan.JENIS_GOLONGAN = '1') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 0 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)< 12 THEN YEAR(pegawai.TMT_GOL)
WHEN (pangkat_golongan.JENIS_GOLONGAN = '2') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 1 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)< 12 THEN YEAR(pegawai.TMT_GOL)
ELSE 1 + YEAR(pegawai.TMT_GOL) END AS TAHUN_HITUNG,CASE PEGAWAI.MASA_KERJA_BLN_AKHIR
WHEN (12 -(pegawai.MASA_KERJA_BLN_AKHIR) + MONTH(pegawai.TMT_GOL) > 12)
THEN (12 - (pegawai.MASA_KERJA_BLN_AKHIR) + MONTH(pegawai.TMT_GOL) - 12)
ELSE (12 - (pegawai.MASA_KERJA_BLN_AKHIR) + MONTH(pegawai.TMT_GOL)) END AS BULAN_HITUNG, STR_TO_DATE(TAHUN_HITUNG, BULAN_HITUNG, '01','%Y-%m-%d') AS TMT_HITUNG FROM pegawai, gaji, pangkat_golongan WHERE gaji.KODE_GOLONGAN = pegawai.KODE_PANGKAT_TERAKHIR AND gaji.MASA_KERJA_GOLONGAN = pegawai.MASA_KERJA_THN_AKHIR AND pangkat_golongan.KODE_PANGKAT = pegawai.KODE_PANGKAT_TERAKHIR;
错误代码:1582 调用本机函数“STR_to_DATE”时参数计数不正确


在此处传递4个参数:

STR_TO_DATE(TAHUN_HITUNG, BULAN_HITUNG, '01','%Y-%m-%d')

正如MySQL文档所述,STR_TO_DATE函数只接受两个参数。第一个参数应该是要转换的字符串,第二个参数是日期格式。看起来你有第二个,而不是第一个

您的意思是连接年、月和日期吗?试试这个: STR_TO_dateconcatachun_HITUNG,'-',BULAN_HITUNG,'-','01','%Y-%m-%d'作为TMT_HITUNG

更新

我将主查询设置为子查询,然后对子查询的结果应用str_to_date函数,选择所有其他列。您还可以将您的tahun_hitung和bulan_hitung添加到第一个选择列表中。不能将别名用作同一select语句中的列名。这就是为什么会出现未知列错误


是真的。。str_to_date只需要2个参数,您已经提供了4个参数。您想做什么?我正在尝试将查询结果转换为日期格式。。。所以它总是在每月的第一天。这不是一个解决方案,这只是对问题的确认。提供解决方案,否则这不是答案!您询问错误的来源。这就是解释。你不会问解决方案。@RomanChe他没有问错误的来源,他要求帮助修复他的代码。答案可以通过文档中的正确示例来改进。我已经尝试过了,看起来mysql不知道TAHUN_HITUNG列。它说不知名的专栏“TAHUN_HITUNG”在现场,谢谢。。。如果要使用这些表添加另一个子查询,如何编写一些查询。
STR_TO_DATE(TAHUN_HITUNG, BULAN_HITUNG, '01','%Y-%m-%d')
select NIP_BARU, NAMA_PEGAWAI, KODE_PANGKAT_TERAKHIR, NAMA_PANGKAT, 
GOLONGAN, MASA_KERJA_THN_AKHIR, MASA_KERJA_GOLONGAN, NOMINAL_GAJI,
STR_TO_DATE(concat(TAHUN_HITUNG,'-', BULAN_HITUNG,'-', '01'),'%Y-%m-%d') AS TMT_HITUNG 
from (
        SELECT DISTINCT pegawai.NIP_BARU, pegawai.NAMA_PEGAWAI, pegawai.KODE_PANGKAT_TERAKHIR,pangkat_golongan.NAMA_PANGKAT, pangkat_golongan.GOLONGAN, pegawai.MASA_KERJA_THN_AKHIR, gaji.MASA_KERJA_GOLONGAN, gaji.NOMINAL_GAJI,CASE PEGAWAI.TMT_GOL
        WHEN (pangkat_golongan.JENIS_GOLONGAN = '2') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 0 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)> 12 THEN 2 + YEAR(pegawai.TMT_GOL)
        WHEN (pangkat_golongan.JENIS_GOLONGAN = '1') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 1 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)> 12 THEN 2 + YEAR(pegawai.TMT_GOL)
        WHEN (pangkat_golongan.JENIS_GOLONGAN = '1') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 0 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)< 12 THEN YEAR(pegawai.TMT_GOL)
        WHEN (pangkat_golongan.JENIS_GOLONGAN = '2') AND pegawai.MASA_KERJA_THN_AKHIR MOD 2 = 1 AND 12 - pegawai.MASA_KERJA_BLN_AKHIR + MONTH(pegawai.TMT_GOL)< 12 THEN YEAR(pegawai.TMT_GOL)
        ELSE 1 + YEAR(pegawai.TMT_GOL) END AS TAHUN_HITUNG,CASE PEGAWAI.MASA_KERJA_BLN_AKHIR
        WHEN (12 -(pegawai.MASA_KERJA_BLN_AKHIR) + MONTH(pegawai.TMT_GOL) > 12)
        THEN (12 - (pegawai.MASA_KERJA_BLN_AKHIR) + MONTH(pegawai.TMT_GOL) - 12)
        ELSE (12 - (pegawai.MASA_KERJA_BLN_AKHIR) + MONTH(pegawai.TMT_GOL)) END AS BULAN_HITUNG 
        FROM pegawai, gaji, pangkat_golongan 
        WHERE gaji.KODE_GOLONGAN = pegawai.KODE_PANGKAT_TERAKHIR AND gaji.MASA_KERJA_GOLONGAN = pegawai.MASA_KERJA_THN_AKHIR AND pangkat_golongan.KODE_PANGKAT = pegawai.KODE_PANGKAT_TERAKHIR
) subquery;