首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串转换日期和/或时间时,插入或更新日期字段时出现以下错误转换失败

从字符串转换日期和/或时间时,插入或更新日期字段时出现以下错误转换失败
EN

Stack Overflow用户
提问于 2019-09-21 03:29:54
回答 1查看 827关注 0票数 0

我正在尝试更新/插入表中的日期时间戳值,我得到‘转换失败时从字符串转换日期和/或时间’:

代码语言:javascript
复制
return UserTableDto.update({
      'firstName': user.firstName,
      'lastName': user.lastName,
      'LastUpdatedBy': user.lastUpdatedBy,
      'LastUpdatedOn': new Date()
    }).then((userDtoResult: UserDto) => {
      resolve(userDtoResult);
    });

用户模型:

代码语言:javascript
复制
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 {

    @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;
}

引发以下异常:

代码语言:javascript
复制
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 64位
  • TypeScript版本: 3.3.3333
  • sequelize-typescript: 1.0.0
  • 单调乏味: 6.3.0

使用sequelize创建了一个问题:Sequelize Issue 11460

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-23 23:04:35

我已经通过以下方式解决了我的问题:

代码语言:javascript
复制
return UserTableDto.update({
      'firstName': user.firstName,
      'lastName': user.lastName,
      'LastUpdatedBy': user.lastUpdatedBy,
      'LastUpdatedOn': Sequelize.fn('GETDATE')
    }).then((userDtoResult: UserDto) => {
      resolve(userDtoResult);
    });

它将输出以下查询:

代码语言:js
复制
UPDATE [UAM_User] SET [LastUpdatedOn]=GETDATE() OUTPUT INSERTED.* WHERE [userId] = @0

这将适用于SQL server。如果使用Oracle或某些数据库,请使用生成日期的函数。例如,在MySQL中,获取当前时间的函数是NOW(),因此该函数为:

代码语言:js
复制
'LastUpdatedOn': Sequelize.fn('GETDATE')

或者需要将object类型从Date改为string,并以yyyy-MM-dd HH:mm:ss.SSSSSS格式传递格式化的日期值:

代码语言:javascript
复制
@Column
LastUpdatedOn: string; // Changed from Date

然后将值传递到此列需要传递格式化的日期值:

代码语言:javascript
复制
    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);
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58034185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档