При вставке или обновлении поля даты возникает следующая ошибка. Ошибка преобразования при преобразовании даты и / или времени из символьной строки.

Я пытаюсь обновить / вставить значение штампа даты и времени в таблицу, я получаю сообщение «Ошибка преобразования при преобразовании даты и / или времени из символьной строки»:

    return UserTableDto.update({
      'firstName': user.firstName,
      'lastName': user.lastName,
      'LastUpdatedBy': user.lastUpdatedBy,
      'LastUpdatedOn': new Date()
    }).then((userDtoResult: UserDto) => {
      resolve(userDtoResult);
    });

Модель пользователя:

import { Table, Column, Model, HasMany, DataType, PrimaryKey, ForeignKey, Default, BelongsToMany, BelongsTo } from 'sequelize-typescript';

@Table({ freezeTableName: true, tableName: 'User', timestamps: false })
export class UserDto extends Model<UserDto> {

    @PrimaryKey
    @Default(DataType.UUIDV4)
    @Column(DataType.UUID)
    userId: string;

    @Column
    firstName: string;

    @Column
    lastName: string;

    @Column
    email: string;

    @Column
    InitCreatedBy: string;

    @Column
    StartDate: Date;

    @Column
    EndDate: Date;

    @Column
    InitCreatedOn: Date;

    @Column
    LastUpdatedBy: string;

    @Column
    LastUpdatedOn: Date;

    @Default(true)
    @Column
    active: boolean;

    @Default(false)
    @Column
    deleted: boolean;

    @Column
    deletedOn: Date;
}

Выдает следующее исключение:

original:
    { RequestError: Conversion failed when converting date and/or time from character string.
     at Parser.tokenStreamParser.on.token (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\connection.js:779:27)
     at emitOne (events.js:116:13)
     at Parser.emit (events.js:211:7)
     at Parser.parser.on.token (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\token-stream-parser.js:27:14)
     at emitOne (events.js:116:13)
     at Parser.emit (events.js:211:7)
     at addChunk (C:\Users\someuser\workspaces\project\node_modules\tedious\node_modules\readable-stream\lib\_stream_readable.js:297:12)
     at readableAddChunk (C:\Users\someuser\workspaces\project\node_modules\tedious\node_modules\readable-stream\lib\_stream_readable.js:279:11)
     at Parser.Readable.push (C:\Users\someuser\workspaces\project\node_modules\tedious\node_modules\readable-stream\lib\_stream_readable.js:240:10)
     at Parser.Transform.push (C:\Users\someuser\workspaces\project\node_modules\tedious\node_modules\readable-stream\lib\_stream_transform.js:139:32)
     at doneParsing (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:80:14)
     at token (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\infoerror-token-parser.js:48:5)
     at call.lineNumber (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\infoerror-token-parser.js:13:19)
     at awaitData (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:179:7)
     at Parser.awaitData (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:103:7)
     at Parser.readUInt32LE (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:176:10)
     at parser.readBVarChar.procName (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\infoerror-token-parser.js:12:90)
     at readBuffer.data (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:316:9)
     at awaitData (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:308:7)
     at Parser.awaitData (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:103:7)
     at Parser.readBuffer (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:305:10)
     at readUInt8.length (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:315:12)
     at awaitData (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:123:7)
     at Parser.awaitData (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:103:7)
     at Parser.readUInt8 (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:120:10)
     at Parser.readBVarChar (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:314:10)
     at parser.readBVarChar.serverName (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\infoerror-token-parser.js:11:22)
     at readBuffer.data (C:\Users\someuser\workspaces\project\node_modules\tedious\lib\token\stream-parser.js:316:9)
      message: 'Conversion failed when converting date and/or time from character string.',
      code: 'EREQUEST',
      number: 241,
      state: 1,
      class: 16,
      serverName: 'sqlsvr',
      procName: '',
      lineNumber: 1,
      sql: 'UPDATE [User] SET [LastUpdatedOn]=@0 OUTPUT INSERTED.* WHERE [userId] = @1',
      parameters:
       { '0': '2019-09-20 16:58:52.256 +00:00',
         '1': 'E1000C5A-43E1-4F52-88A1-4EE6A869FE28' } },
   sql: 'UPDATE [User] SET [LastUpdatedOn]=@0 OUTPUT INSERTED.* WHERE [userId] = @1',
   parameters:
    { '0': '2019-09-20 16:58:52.256 +00:00',
      '1': 'E1000C5A-43E1-4F52-88A1-4EE6A869FE28' } }

Я пробовал использовать new Date (). ToISOString (), new Date (). ToUTCString (), new Date (). GetTime (), но все та же ошибка.

Окружающая среда:

  • Версия продолжения: 5.19.0
  • Версия Node.js: v8.16.0
  • Операционная система: Windows 10 64bit
  • Версия TypeScript: 3.3.3333
  • продолжение машинописного текста: 1.0.0
  • утомительно: 6.3.0

Создана проблема с sequelize: Sequelize Issue 11460


person Taher Ghulam Mohammed    schedule 20.09.2019    source источник


Ответы (1)


Я решил свою проблему следующим образом:


    return UserTableDto.update({
      'firstName': user.firstName,
      'lastName': user.lastName,
      'LastUpdatedBy': user.lastUpdatedBy,
      'LastUpdatedOn': Sequelize.fn('GETDATE')
    }).then((userDtoResult: UserDto) => {
      resolve(userDtoResult);
    });

Будет выведен следующий запрос:

UPDATE [UAM_User] SET [LastUpdatedOn]=GETDATE() OUTPUT INSERTED.* WHERE [userId] = @0

Это будет для SQL-сервера. Если вы используете Oracle или какой-либо db, используйте функцию, которая генерирует Date. Например, в MySQL функция для получения текущего времени - NOW (), поэтому функция будет следующей:

'LastUpdatedOn': Sequelize.fn('GETDATE')

Или необходимо изменить тип объекта с Date на строку и передать форматированное значение даты в формате yyyy-MM-dd HH: mm: ss.SSSSSS:

@Column
LastUpdatedOn: string; // Changed from Date

Затем для передачи значения в этот столбец необходимо передать форматированное значение даты:


    const d = new Date();
    const dt = `${d.getFullYear()}-${d.getUTCMonth() + 1}-${d.getDate()} ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}.${d.getMilliseconds()}`;

    return UserTableDto.update({
      'firstName': user.firstName,
      'lastName': user.lastName,
      'LastUpdatedBy': user.lastUpdatedBy,
      'LastUpdatedOn': dt
    }).then((userDtoResult: UserDto) => {
      resolve(userDtoResult);
    });

person Taher Ghulam Mohammed    schedule 23.09.2019