2013年10月24日木曜日

SQL Server(T-SQL)で、HTML形式で保存されている項目から文字列を抽出

SQL Server(T-SQL)で、HTML形式で保存されている項目から文字列を抽出

業務連絡として、HTML Editorの値をNVARCHAR(MAX)の項目で保存
桁数がMAXなので、SUBTRONGで短く50桁にしたら
タグなども無視したので、正しくHTML表示されなかった。

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
    WHILE @Start > 0 AND @End > 0 AND @Length > 0
    BEGIN
        SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
        SET @Start = CHARINDEX('<',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END
    RETURN LTRIM(RTRIM(@HTMLText))
END
GO
 

NVARCHARで返したい場合は

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
    WHILE @Start > 0 AND @End > 0 AND @Length > 0
    BEGIN
        SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
        SET @Start = CHARINDEX('<',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END
    RETURN LTRIM(RTRIM(@HTMLText))
END
GO 

VARCHARをNVARCHARに変更すればOK

使い方
SUBSTRING([dbo].[udf_StripHTML](A.[Comment]),1,50),

IE11はIE10とは、また違う

IE11はIE10とは、また違う

IE10では、JavaScriptが動作していたが、IE11だと以下のJavaScriptがエラー表示された。

object does not support 'attachEvent' property or a method.

2013年10月10日木曜日

PowerShell 3.0

WindowsでIISのWebサービス経由でメール送信のシステムを構築。

Webブラウザ経由なら良いがタスクスケジュールのバッチから
Webサービスを起動するExeをC#で作成していた。

 VBScriptからIEを起動していたのだが、何故か失敗する時がある。

node.jsとかのサーバーサイドのシステム構築を考えたが
ふと、PowerShellの存在を思い出した。

昔(PowerShell 2.0)の時は、Command let が 230くらいだったのが
現在の Power Shell 3.0は10倍の 2300になっていた。

確か Power Shell 2.0から .NetのライブラリもCall出来るので
これから覚えても損は無いと思う。

また、Windows2012では標準インストールになっている。

Windows8では、Power ShellのVersionは、3.0

確認方法は 
> $PSVersionTable