Query op substring

Ik heb een datetime veld genaamd ‘meetmoment’ Ik wil nu een selectie maken op basis van dit veld maar alleen van het tijdstip in het veld.
BV alle records van 13.00 uur.


<?php
$tijd='13.00';

$query ="SELECT meetmoment, ID "; 
$query .="FROM suiker ";
$query .=“WHERE SUBSTR(meetmoment,10,6) = $tijd   ";
?>


Dit werkt niet. Kan iemand aangeven wat ik hier fout doe?

Bedankt,
Peter
Hoe luidt de definitie van de meetmoment-kolom?
En weet je zeker dat je de goede lengte en startpositie te pakken hebt?

Als dit een DATETIME is, dan is het formaat yyyy-mm-dd hh:ii:ss.

Bij functies als substring begin je te tellen vanaf 1, dus dit zou dan (aangenomen dat het een DATETIME betreft) SUBSTR(meetmoment, 12, 8) of simpelweg SUBSTR(meetmoment, 12) moeten zijn.

En omdat het een string betreft zou de waarde $tijd tussen quotes moeten staan.

En als tijd (apart) interessant is dan loont het misschien de moeite om de informatie in twee aparte kolommen op te slaan.

Voer de query eens uit met de SUBSTR() in je SELECT, dan kun je zien wat je terugkrijgt. En je zou mysqli_errorno() kunnen inspecteren. Als deze verschilt van 0, of als de query zelf FALSE retourneert dan wil dit zeggen dat deze syntactisch niet klopt.
Thomas,
Bij mij geeft dit het resultaat

<td><?PHP echo substr($row_rs_query["meetmoment"],11,5)?></td>


Tijd 13:00 17:48 23:05 08:15 11:50 16:55 23:59 08:41 12:50 17:24 23:58 08:30 10:01 10:01 12:47

Dus start op 11
Ik zal ook kiezen voor een ingebouwde functie zoals Ivo zegt. Alleen het nadeel van TIME() is dat je zowel uur,minuten als seconden en evt. miliseconden krijgt. Gebruik dan HOUR() en MINUTE() of DATE_FORMAT(datetime, "%H:%i") om je tijd te vergelijken. Dit zal na verwachting sneller gaan dan met SUBSTR.
Dan is de kolom waarschijnlijk geen DATETIME kolom? Hoe luidt de definitie van deze kolom en hoe ziet een complete waarde in zo'n kolom er uit?

En ja, TIME is wss beter (als het een DATETIME was) of dus gewoon opslaan in een aparte (tijds)kolom.
Peter van Kroonenburg op 22/11/2019 14:52:23

Thomas,
Bij mij geeft dit het resultaat
<td><?PHP echo substr($row_rs_query["meetmoment"],11,5)?></td>

Tijd 13:00 17:48 23:05 08:15 11:50 16:55 23:59 08:41 12:50 17:24 23:58 08:30 10:01 10:01 12:47

Dus start op 11



dat is de php functie substr();

Mysql's substring functie is anders en begint bij 1 te tellen

[size=xsmall]Toevoeging op 22/11/2019 15:58:38:[/size]

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substr
Helpt dit?

WHERE time(meetmoment) = $tijd

Maak van tijd '13:00:00'
Helaas, ook onderstaande versie geeft geen resultaat.


<?php
$tijd='13.00.00';
$query  ="SELECT * "; 
$query .="FROM suiker ";
$query .="WHERE time(meetmoment) = '$tijd'  ";

$rs_query = mysqli_query($verbinding,$query) or die($mysqli_error($verbinding));
$row_rs_query = mysqli_fetch_assoc($rs_query);
$totalRows_rs_query= mysqli_num_rows($rs_query); ?>
<tbody>
	<tr>         
		<td bgcolor="#ccc">Tijd</td>
	</tr>
	
	<tr>       
	<?PHP do { 	?>
		<td><?PHP echo substr($row_rs_query["meetmoment"],11,5)?></td>
	</tr>
</tbody>	
</table>

<?PHP } while ($row_rs_query = mysqli_fetch_assoc($rs_query)); 
exit();
?>


Adoptive Solution op 22/11/2019 16:01:57

Maak van tijd '13:00:00'

Peter van Kroonenburg op 22/11/2019 22:54:06

$tijd='13.00.00';


Dit is niet hetzelfde.
En als meetmoment een DATETIME is dan zou ik dat ook niet als string behandelen, maar meer als een timestamp. In PHP heb je hier de DateTime klasse voor. Misschien wat omslachtiger, maar het werkt, en het beschrijft beter wat voor type data je gebruikt, niet simpelweg een string, maar een (datum)tijd.

Of je voert de conversie meteen uit aan de MySQL-zijde door SELECT *, TIME(meetmoment) AS tijd te gebruiken. Dan kun je simpelweg $row_rs_query['tijd'] gebruiken.

Reageren