MSSQL将VARCHAR转换为货币

时间:2018-01-23 06:39:32

标签: sql-server

将VARCHAR转换为货币非常新。我在这里需要指导。

请问这是如何投资货币的,因为我在这里显然有些混乱。

查询看起来像这样

select credit, debit, balance , 'GBP' + CONVERT (varchar 50) cast (credit as money),1, (debit as money),1, (balance as money),1 as [debit], [credit], [balance] from transactions

修改

如果要求,我会粘贴ma表格列以供您查看

    TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME  COLUMN_NAME ORDINAL_POSITION    COLUMN_DEFAULT  IS_NULLABLE DATA_TYPE   CHARACTER_MAXIMUM_LENGTH    CHARACTER_OCTET_LENGTH  NUMERIC_PRECISION   NUMERIC_PRECISION_RADIX NUMERIC_SCALE   DATETIME_PRECISION  CHARACTER_SET_CATALOG   CHARACTER_SET_SCHEMA    CHARACTER_SET_NAME  COLLATION_CATALOG   COLLATION_SCHEMA    COLLATION_NAME  DOMAIN_CATALOG  DOMAIN_SCHEMA   DOMAIN_NAME
banksql dbo transactions    id  1   NULL    NO  int NULL    NULL    10  10  0   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
banksql dbo transactions    depositor_name  2   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    accountNo1  3   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    telephone   4   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    transaction_desc    5   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    credit  6   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    debit   7   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    balance 8   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL
banksql dbo transactions    transaction_date    9   NULL    YES varchar 50  50  NULL    NULL    NULL    NULL    NULL    NULL    iso_1   NULL    NULL    SQL_Latin1_General_CP1_CI_AS    NULL    NULL    NULL

1 个答案:

答案 0 :(得分:0)

你已经被告知将数值存储为字符串的错误想法......所以我不会谈论这个。关于类型转换的一些提示:

这部分代码没有任何意义:

'GBP' + CONVERT (varchar 50) cast (credit as money),1, (debit as money),1, (balance as money),1 as [debit]

您可以使用CAST()CONVERT()

更改值的类型
  • SELECT CAST('123' AS INT)返回数字 123
  • SELECT CONVERT(INT, '123')完全相同

从SQL Server 2012+版本开始,TRY_CAST()TRY_CONVERT()可以更好地处理无效值。

  • CAST()将使用隐式类型转换,而
  • CONVERT()允许第三个参数指定转换模式。 Find the details here

您可以尝试这样的事情:

SELECT 'GBP' + credit         AS ConcatenatedString --as your "credit" is a string type already...
      ,CAST(credit AS MONEY)  AS CastedString       --numeric return
FROM transactions