将从常量字段派生的varchar值转换为Month和Year

时间:2018-11-14 13:31:41

标签: sql date sql-server-2016 varchar

我有一个查询,我要从字符串中抓取某些文本。字符串的示例是:

“捕获的信用卡:万事达卡,xxxx-xxxx-xxxx-xxxx,09/19。设置为默认值。”

我的查询正在从该文本中提取到期月份和年份。

SUBSTRING(ADT.MsgText, CHARINDEX('/', ADT.MsgText, 0) -2, 2) AS [Month]
,'20' + SUBSTRING(ADT.MsgText, CHARINDEX('/', ADT.MsgText, 0) + 1, 2) AS [Year]

但是,我需要将这些数字值识别为日期值。我尝试了以下方法,但未成功:

UPDATE CCC
SET CCC.[Month] = convert(date, convert(varchar(4), CCC.[Year]) + ' ' + convert(varchar(2), CCC.[Month]))
FROM CC_Captured CCC

我得到的错误消息是:“更新或视图或函数'CCC'的插入或插入失败,因为它包含派生或常数字段。”

我想知道如何将这些值转换为日期? 任何帮助表示赞赏!

(我也正在使用SQL 2016)

1 个答案:

答案 0 :(得分:0)

您可以使用DATEFROMPARTS来构造一个月中的日期(该月的第一天或最后一天)。

Route::get('/reservation/date/{date}', 'ReservationController@getScheduleForDate');
Route::resource('/reservation', 'ReservationController');
Route::get ('/admin', 'AdminController@index');
Route::get('/home', 'HomeController@index')->name('home');
Auth::routes();

Route::get('/{vue?}', function () {
    return view('index');
})->where('vue', '[\/\w\.-]*');

或更妙的是,使用EOMONTH函数:

php artisan route:clear
php artisan cache:clear