Php SQL上的between函数之间的字符串不包含
我的数据库中有120个数据,我的目标是tanggal列,它们都有一个VARCHAR数据类型。其中大多数都有“2017年12月4日”的值,我已经插入了一个值来触发具有“2017年11月20日”和“2017年12月20日”值的数据 我想使用BETWEEN函数选择数据,但当我运行查询时,它只显示我在BETWEEN函数中提到的日期 所有“2017年12月4日”值均未显示在结果中 为什么会发生这种情况?请帮忙 这是我的代码:Php SQL上的between函数之间的字符串不包含,php,sql-server,Php,Sql Server,我的数据库中有120个数据,我的目标是tanggal列,它们都有一个VARCHAR数据类型。其中大多数都有“2017年12月4日”的值,我已经插入了一个值来触发具有“2017年11月20日”和“2017年12月20日”值的数据 我想使用BETWEEN函数选择数据,但当我运行查询时,它只显示我在BETWEEN函数中提到的日期 所有“2017年12月4日”值均未显示在结果中 为什么会发生这种情况?请帮忙 这是我的代码: //filter query $tanggal = $_P
//filter query
$tanggal = $_POST['tanggal'];
$jenis_pelanggaran = $_POST['jenis-pelanggaran'];
$lokasi_outlet = $_POST['lokasi-pelanggaran'];
$pelanggar = $_POST['pelanggar'];
$lastmonth = "20/".date("m/Y", strtotime("-1 months"));
$now = "20/".date("m/Y");
echo $lastmonth . "<br>" . $now;
// Define and execute the query.
// Note that the query is executed with a "scrollable" cursor.
$sql = "SELECT
dbo.pelanggaran.id_pelanggaran,
dbo.pelanggaran.tanggal,
dbo.pelanggaran.waktu_pelanggaran,
dbo.pelanggaran.nama_pelanggar,
dbo.pelanggaran.bukti_screenshot,
dbo.pelanggaran.bukti_rekaman,
dbo.pelanggaran.bukti_dokumen,
dbo.jenis_pelanggaran.pelanggaran,
dbo.jenis_pelanggaran.j_denda,
dbo.daftar_outlet.nama_outlet
FROM
dbo.pelanggaran
INNER JOIN dbo.jenis_pelanggaran ON dbo.pelanggaran.id_jenis_pelanggaran = dbo.jenis_pelanggaran.id
INNER JOIN dbo.daftar_outlet ON dbo.pelanggaran.id_lokasi_outlet = dbo.daftar_outlet.id
WHERE
dbo.pelanggaran.tanggal BETWEEN '$lastmonth' AND '$now'
AND
dbo.pelanggaran.nama_pelanggar LIKE '%$pelanggar%'
AND
dbo.daftar_outlet.nama_outlet LIKE '%$lokasi_outlet%'
AND
dbo.jenis_pelanggaran.pelanggaran LIKE '%$jenis_pelanggaran%' ORDER BY tanggal DESC";
$stmt = sqlsrv_query($conn, $sql, array(), array( "Scrollable" => 'static' ));
if ( !$stmt )
die( print_r( sqlsrv_errors(), true));
不要用字符串存储日期,这会导致这场灾难 将日期存储在日期中,这样就不会发生 如果您坚持要以字符串形式存储日期,请以YYYYMMDD格式存储,以便正确排序,至少不会出现像这样令人讨厌的效果,你只会在其他方面表现不佳,并且很难将日期作为字符串来处理任何类型的数学运算,比如计算日期是多少天前 2017年12月4日不是在2017年11月20日和2017年12月20日之间,就像大象在你好和再见之间一样
考虑强类型,而不是严格类型:它们是字符串,而不是日期字符串。如果你不认为他们是约会对象,那么很容易理解为什么他们没有按照你的预期进行分类
0412
2011
2012
0412显然不是在2011年和2012年之间。也不是因为它们是字符串,所以0412也不在410和415之间,而是在0410和0415之间。我希望这有帮助
当存储为字符串时,日期和时间[和数字]将失去其意义,也可能添加不正确的值。2017年13月13日是一个完全有效的字符串,但无论您在哪个地区,都会抛出一个无效的日期错误。Guh,日期最先显示的日期。我只是将所有内容作为int时间戳放入数据库。如果我需要直观地输出它,那么php的日期就可以轻松地完成它的工作。这里的问题不是您的查询,而是您决定将日期存储为字符数据。不要这样做!!!但是当我将数据类型设置为date并试图显示数据时,它显示了一个错误,先生。可恢复的致命错误:类DateTime的对象无法转换为字符串,即使我的代码不是OOP样式。您的帽子颠倒了:我是澳大利亚人;一切都颠倒了: