簡體   English   中英

將字符串拆分為以“]開頭,以“ As”結尾的子字符串

[英]Split a string into sub-strings starting from “ ] ” ending with “As”

我使用以下查詢從Microsoft SQL Server 2008 R2中的存儲過程中提取了一個字符串: EXEC sp_helptext 'MyStoredProcedureName'; 我需要將此字符串拆分為數組或子字符串,這些字符串或子字符串以括號“]”結尾,並以單詞“ As”結尾。 我必須在(fieldsArray)中保存所有以“ @”開頭的所有字段,並在(typeArray)中的空格之后保存這些字段的類型,然后將它們以以下格式輸出到node.js文件中:

 InvoiceNo: {
     type: DataType.String(255),
    },

這是提取的字符串:

CREATE PROCEDURE [dbo].[MyStoredProcedureName]
 @InvoiceNo int
,@TransDate datetime 
,@CustomerID bigint
,@CurrencyID bigint
,@SalesInvoiceTypeID bigint 
,@DiscountAmount nvarchar(50) 
,@DetailXml ntext 
,@TotalAll float 
,@TotalBefore float 
,@TaxAmount float
,@OtherExpenses float
,@OutVouchersNo nvarchar(1000)
,@Notes nvarchar(1000) 
,@TotalWiegts float
,@VoucherDefID bigint
,@SalesmanID bigint
,@IsSale bit

 AS
BEGIN TRANSACTION

編輯:我使用了另一個查詢,而不是上面提到的。 現在,我有一個包含查詢結果的對象,該查詢結果是字段名稱,每行分別在單獨的行中。 我現在需要做的是將此對象分隔為字符串數組,以便可以分別處理每個名稱。 對象“名稱”包含我使用的查詢結果:

Names = await sequelize.query(namesQuery); 

這是console.log(Names);的輸出console.log(Names);

[ [ { '': 'InvoiceNo' },
    { '': 'TransDate' },
    { '': 'CustomerID' },
    { '': 'CurrencyID' },
    { '': 'SalesInvoiceTypeID' },
    { '': 'DiscountAmount' },

我嘗試了Names.split但收到錯誤消息“ Names.split不是函數”

您可以查詢Sys.Parameters表:

SELECT Substring(Parameters.Name,2,255) + ': { type: DataType.' + 
       CASE types.Name
          WHEN 'varchar' THEN 'String(' + CAST(Parameters.Max_Length As Varchar)      
          WHEN 'int' THEN 'Int'
          ELSE 'COMPLETE THE REST OF THIS yourself.....'
       END + '),},'
FROM Sys.Parameters
INNER JOIN sys.procedures on parameters.object_id = procedures.object_id 
INNER JOIN sys.types on parameters.system_type_id = types.system_type_id AND parameters.user_type_id = types.user_type_id
Where procedures.name = 'MyStoredProcedureName'

如果您認為符號@僅用於標識字段名的開頭,則可以如下使用正則表達式:

let result = {}

str.match(/@\w+ [a-z]+/g)
  .map(s => s.match(/@(\w+) ([a-z]+)/))
  .forEach(r => {
    let fieldName = r[1]
    let type = r[2]
    result[fieldName] = { type }
  })

console.log(JSON.stringify(result, undefined, 2))

這將輸出

{
  "InvoiceNo": {
    "type": "int"
  },
  "TransDate": {
    "type": "datetime"
  },
  ...
}

我猜只有正則表達式可以達到相同的目的,但是代碼更容易理解:

  • 第一個match捕獲所有@FieldName type字符串
  • 第二個match捕獲每個FieldNametype
  • 最后一個用名稱為FieldName和content { type: "type" }成員填充對象result
  • 最后一個命令格式化所有內容並輸出到控制台

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM