为什么此查询返回货币值?

时间:2018-03-08 10:56:09

标签: sql sql-server

今天我写了一个应该返回错误的查询。相反,它返回值为15的列名this.http.get<DomainUser>(this.apiUrl + '/Users/Self').subscribe( next => { console.info('User: "%s" (Admin: %s)', next.name, next.isAdmin ? 'yes' : 'no'); // ... }, error => { // error handling } ); 和数据类型const fs = require('fs') const {Transform} = require('stream') const upperCaseTransform = new Transform({ transform: (chunk, encoding, done) => { const result = chunk.toString().toUpperCase() done(null, result) } }) fs.createReadStream('input.txt') .pipe(upperCaseTransform) .pipe(fs.createWriteStream('output.txt')) 。 你知道为什么吗?

why

结果:

money

1 个答案:

答案 0 :(得分:9)

You're specifying a constant

  

货币常数表示为数字字符串,可选的小数点和可选的货币符号作为前缀

所以select €15导致money常量,select $15以及select ¥15也是如此。

Jeroen in the comments指出了一个特点:

  

因为日元符号(¥)是货币指示符,并且在某些原生日语字符集中,其代码点与ASCII中反斜杠的代码点相同。

另见MSDN: money and smallmoney (Transact-SQL)

所以select \15似乎等于select ¥15

对于列名称:select 5a会生成一个别名为a且值为5的列。因为“a”不是数字后缀,所以它被视为select 5 as a,其中“as”是可选的。相反,select 5e会在未命名的列中返回5,因为“e” 是一个数字后缀。

所以你发现了另一种写select ¥15 as why的方式。