我将MySQL数据库迁移到了SQL Server 2019。
与MySQL配合良好:
**$now = Carbon::now()->format('Y-m-d 23:59:00');
->leftJoin('abonnements', function ($join) use ($now) {
$join->on('abonnements.client_id', '=', 'clients.id')
->whereRaw(DB::raw("NOT EXISTS (
SELECT 1 FROM abonnements a1
where a1.date_fin_tolerance >= \"{$now}\" and a1.date_debut <= \"{$now}\"
and a1.client_id = clients.id
AND a1.created_at > abonnements.created_at
)"**
数据库状态[42 S22]:[Microsoft][用于SQL Server的ODBC驱动程序17][SQL Server]无效的列名:'2022年12月20日23:59:00'。(SQL:从[客户]中选择计数(*)作为[订阅]上的左加入[订阅]的聚合。[客户ID] = [客户].[ID]且不存在(\r\n从订阅a1\r\n中选择1,其中a1.date_end_tolerance〉=转换(“2022-12-20 23:59:00”作为日期时间)且a1.start_date〈=转换(“2022-12-20 23:59:00”作为日期时间)\r\n且a1.client_id = customers.id\r\n且a1.created_at〉订阅.创建时间\r\n)和[订阅].[结束容差日期]〉= 2022年12月20日23:59:00和[订阅].[开始日期]〈= 2022年12月20日23:59:00在[订阅类型]上离开加入[订阅类型].[订阅类型ID] = [订阅类型].[ID],其中[客户].[删除时间]为空)”
为什么会将值与列混淆
1条答案
按热度按时间vu8f3i0k1#
双引号用于标识符(例如:列名或表名)。使用单引号将日期时间值作为字符串传递。